2012-10-17 4 views
6

Io sto usando un DataTable con il contenutocolonna DataTable riordino

 column1 column2 column3 column4 column5 column6 column7 column8 column9 column10 
row1 a   b   c   d  e  f  g  h  i  j 

voglio il tavolo per cambiare l'ordine come

 column4 column2 column1 column7 column6 column9 column10 column5 column8 column3 
row1  d   b   a   g  f  i  j  e  h  c  

Ho provato ad utilizzare il metodo DataTable.Column[i].SetOrdinal() ma scambia solo la prima colonna propriamente.

+2

perché vuoi riordinare nel datatable? – Shyju

+0

se questo è per visualizzare la tabella da qualche parte allora probabilmente troverai che la maggior parte (tutti) dei modi standard di mostrarlo ti permetterà di impostare quale ordine mostrare le colonne in ... – Chris

+0

possibile duplicato di [Come modificare le colonne DataTable ordine] (http://stackoverflow.com/questions/3757997/how-to-change-datatable-colums-order) –

risposta

9

Dato che non hai mostrato il codice completo, è difficile dire cosa c'è di sbagliato. Ma questo dovrebbe funzionare:

public static void ReorderTable(ref DataTable table, params String[] columns) 
{ 
    if (columns.Length != table.Columns.Count) 
     throw new ArgumentException("Count of columns must be equal to table.Column.Count", "columns"); 

    for (int i = 0; i < columns.Length; i++) 
    { 
     table.Columns[columns[i]].SetOrdinal(i); 
    } 
} 

Invece di un params String[] si potrebbe anche utilizzare un List<DataColumn> o che altro si preferisce.

testati con i dati di esempio:

var table = new DataTable(); 
table.Columns.Add("column1", typeof(string)); 
table.Columns.Add("column2", typeof(string)); 
table.Columns.Add("column3", typeof(string)); 
table.Columns.Add("column4", typeof(string)); 
table.Columns.Add("column5", typeof(string)); 
table.Columns.Add("column6", typeof(string)); 
table.Columns.Add("column7", typeof(string)); 
table.Columns.Add("column8", typeof(string)); 
table.Columns.Add("column9", typeof(string)); 
table.Columns.Add("column10", typeof(string)); 

for (int i = 0; i < 10; i++) 
{ 
    table.Rows.Add("colum1", "column2", "colum3", "column4", "column5", "column6", "column7", "column8", "column9", "column10"); 
} 

ReorderTable(ref table, "column4", "column2", "column1", "column7", "column6", "column9", "column10", "column5", "column8", "column3"); 

lavora già con .NET conteggio 2.

0
int cnt = 0; 
foreach (string s in colsList) 
{ 
    if (table.Columns.Contains(s)) 
    { 
     table.Columns[s].SetOrdinal(cnt); 
     cnt++; 
    } 
} 

non ha bisogno di essere lo stesso.