none
Modifica tipo dati in datagridview RRS feed

  • Domanda

  • Salve a tutti, ho un datagridview con cui visualizzo dei dati provenienti da un datatable, che a sua volta è caricato tramite un database.

    Purtroppo i dati nel database sono tutti stringhe, di conseguenza pure i dati nel datatable sono in formato stringa, e quindi pure nel datagrid sono formato stringa.

    Questo causa un problema, ovvero che che se tento di ordinare dei "numeri" esempio  il numero 8, il numero 20, il numero 100, questi vengono ordinati nel seguente modo:

    100, 20, 8  questo avviene perchè ovviamente il datagridview li considera stringhe, e  giustamente li ordina in modo testuale, e non numerico.

    Quindi chiedo se è possibile in qualche modo modificare il tipo di colonna in modo da riuscire ad ordinarli come se fossero valori numerici.

    Grazie.

    martedì 24 settembre 2019 17:47

Risposte

  • Forse dovresti studiare un po' meglio il Framework e le sue classi prima di imbarcarti nella scrittura del codice, ma è solo una mia opinione.
    In ogni caso questa è la soluzione:

                    DataTable mioDataTable = new DataTable();
                    mioDataTable.Columns.Add(new DataColumn("Colonna1", typeof(String)));
                    mioDataTable.Columns.Add(new DataColumn("Colonna2", typeof(String)));
                    mioDataTable.Columns.Add(new DataColumn("Colonna3", typeof(String)));
    
                    System.Data.SqlClient.SqlDataReader leggi = comando.ExecuteReader(); 
    
                    for(scorri il dataset) (Io Non uso queste classi)
                    {
                            DataRow riga = tuaDatatable.NewRow();
                            riga["Colonna1"] = Valore1;
                            riga["Colonna2"] = Valore2;
                            riga["Colonna3"] = Valore3;
                            tuaDatatable.Rows.Add(riga);
    
                    }
    
    
                    dataGridView1.DataSource = mioDataTable;
                    mioDataTable.Dispose();
    

    martedì 1 ottobre 2019 06:56

Tutte le risposte

  • Non so che database usi, ma io se serve faccio il cast dei dati direttamente nella query del database. In alternativa ti puoi costruire le Datacolumn come ti pare e riempirle con i dati facendo il casting. Metodo molto più lento ma a mali estremi………..
    giovedì 26 settembre 2019 14:19
  • Scusa il ritardo, intanto grazie per avermi risposto.

    Allora non sono molto esperto, e non ho capito bene come fare il cast dei dati direttamente nella query.

    Io utilizzo un codice abbastanza semplice, del tipo:

    SqlCommand comando = new SqlCommand("select * from MiaTabella order by " + order + " " + ascdesc, conn);
    
    // poi successivamente eseguo il comando memorizzando tutta la tabella dentro un SqlDataReader
    
     SqlDataReader leggi = null;
     leggi = comando.ExecuteReader();
    
    // Adesso carico il contenuto del sqlDataReader dentro al datatable
    
    mioDataTable.Load(leggi);
    
    

    Infine una volta che ho un datatable contenente tutta la tabella del database, posso pure associare il tutto ad un datagrid


    dataGridView1.DataSource = mioDataTable;

    Ho provato a modificare il tipo colonna del datatable, ma prima di caricarci il contenuto, il datatable è vuoto e non contine nemmeno le colonne, quindi non è possibile modificare nessuna colonna;

    e dopo averci caricato dentro il contenuto, oramai non è più possibile modificare il tipo dati della colonna, in quanto mi restituisce un errore.




    lunedì 30 settembre 2019 19:56
  • Forse dovresti studiare un po' meglio il Framework e le sue classi prima di imbarcarti nella scrittura del codice, ma è solo una mia opinione.
    In ogni caso questa è la soluzione:

                    DataTable mioDataTable = new DataTable();
                    mioDataTable.Columns.Add(new DataColumn("Colonna1", typeof(String)));
                    mioDataTable.Columns.Add(new DataColumn("Colonna2", typeof(String)));
                    mioDataTable.Columns.Add(new DataColumn("Colonna3", typeof(String)));
    
                    System.Data.SqlClient.SqlDataReader leggi = comando.ExecuteReader(); 
    
                    for(scorri il dataset) (Io Non uso queste classi)
                    {
                            DataRow riga = tuaDatatable.NewRow();
                            riga["Colonna1"] = Valore1;
                            riga["Colonna2"] = Valore2;
                            riga["Colonna3"] = Valore3;
                            tuaDatatable.Rows.Add(riga);
    
                    }
    
    
                    dataGridView1.DataSource = mioDataTable;
                    mioDataTable.Dispose();
    

    martedì 1 ottobre 2019 06:56
  • A ok a questa soluzione già ci avevo pensato, ma mi sembrava un pò troppo semplicistico scorrere tutta la tabella e fare conversioni , perchè  per quel che ne sappiamo potrebbe contenere migliaia di record, e quindi impiegare troppo tempo?

    lunedì 7 ottobre 2019 17:49
  • A ok a questa soluzione già ci avevo pensato, ma mi sembrava un pò troppo semplicistico scorrere tutta la tabella e fare conversioni , perchè  per quel che ne sappiamo potrebbe contenere migliaia di record, e quindi impiegare troppo tempo?

    Ecco perché ti avevo detto che puoi fare il cast direttamente nella query…………..
    martedì 8 ottobre 2019 06:46