2011-08-24 8 views
9

Ho un DataTable che ha 4 colonne. Voglio cambiare il valore della 3a colonna come "0". Di seguito è riportato il mio DataTable.Come modificare il valore della colonna DataTable senza eseguire il ciclo?

ID    Name   Value  Type 
----   ----   -----  ----- 
1    Sam    250  2 
2    Rai    324  3 
3    Tim    985  8 

mio risultato desiderato dovrebbe essere come di seguito:

ID    Name   Value  Type 
----   ----   -----  ------ 
1    Sam    0   2 
2    Rai    0   3 
3    Tim    0   8 

Come raggiungere questo obiettivo senza loop? Qualsiasi suggerimento per favore.

+0

Eventuali duplicati: http://stackoverflow.com/questions/5063551/set-value-for-all-rows-in-a-datatable-without-for-loop – Waqas

+0

@Waqas: Ma c'è anche loro aveva usato foreach ... – thevan

+0

OK, solo una domanda - perché non loop? – Michael

risposta

13

Che ne dici di questo? ↓ senza loop ....

static void Main(string[] args) 
{ 
    DataTable table = new DataTable(); 

    table.Columns.Add("col1"); 
    table.Columns.Add("col2"); 

    table.Rows.Add(new object[] { "1", "1" }); 
    table.Rows.Add(new object[] { "1", "1" }); 
    table.Rows.Add(new object[] { "1", "1" }); 
    table.Rows.Add(new object[] { "1", "1" }); 

    foreach (DataRow row in table.Rows) 
     Console.WriteLine(row["col2"].ToString()); 

    Console.WriteLine("***************************************"); 

    DataColumn dc = new DataColumn("col2"); 
    dc.DataType = typeof(int); 
    dc.DefaultValue = 0; 

    table.Columns.Remove("col2"); 
    table.Columns.Add(dc); 

    foreach (DataRow row in table.Rows) 
     Console.WriteLine(row["col2"].ToString()); 


    Console.ReadKey(); 
} 
+0

Ho ricevuto la risposta dal codice precedente. grazie mille. – thevan

1

se si conosce l'ID, è possibile filtrarlo semplicemente utilizzando Seleziona o Trova (non ricordo esattamente ma penso sia Seleziona), una volta ottenuta la riga, è possibile assegnare i valori delle colonne.

Sono sicuro che c'è anche un modo migliore LINQ orientato ma questo approccio ADO.NET/System.Data della vecchia scuola dovrebbe funzionare comunque.

+0

Ma Select serve solo a filtrare il datatable dando il suo valore di colonna. Come posso impostare il valore come "0" per tutti i valori della colonna? – thevan

+0

grazie mille per il tuo prezioso contributo alla mia domanda. – thevan

2
DataRow[] rows = myDataTable.Select("id = 'myIdValue'); 
//If you don't want to select a specific id ignore the parameter for select. 

for(int i = 0; i < rows.Length; i ++) 
{ 
     rows[i]["value"] = 0; 
} 

DataTable.Select Method

+0

grazie mille per il tuo prezioso contributo alla mia domanda. – thevan

1

È possibile utilizzare un semplice trucco qui. Elimina la riga e aggiungila nuovamente alla tabella.

dt.Columns.Remove("Value"); 
dt.Columns.Add("Value", type(System.Int32), 0); 
Problemi correlati