2011-08-24 10 views
9

Mam DataTable, który ma 4 kolumny. Chcę zmienić wartość trzeciej kolumny jako "0". Poniżej znajduje się mój DataTable.Jak zmienić wartość kolumny DataTable bez pętli?

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

Moje pożądanego rezultatu powinno być jak poniżej:

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

Jak to osiągnąć bez zapętlenie? Wszelkie sugestie proszę.

+0

możliwe duplikat: http://stackoverflow.com/questions/5063551/set-value-for-all-rows-in-a-datatable-without-for-loop – Waqas

+0

@Waqas: Ale tam też one użyłem foreach ... – thevan

+0

OK, tylko jedno pytanie - dlaczego nie pętla? – Michael

Odpowiedz

13

Co powiesz na to? ↓ bez pętli ....

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

Mam odpowiedź z powyższego kodu. Dziękuję bardzo. – thevan

1

jeśli znasz identyfikator, który możesz po prostu przefiltrować za pomocą opcji Wybierz lub Znajdź (nie pamiętam dokładnie, ale myślę, że jest Wybierz), po uzyskaniu wiersza można przypisać wartości kolumn.

Jestem pewien, że istnieje również lepszy sposób zorientowany na LINQ, ale to stare podejście ADO.NET/System.Data powinno działać.

+0

Ale wybierz tylko filtrować dane, podając wartość kolumny. Jak ustawić wartość "0" dla wszystkich wartości kolumny? – thevan

+0

Dziękuję bardzo za cenny wkład w moje pytanie. – 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

Dziękuję bardzo za cenny wkład w moje pytanie. – thevan

1

Można użyć prostego triku tutaj. Usuń wiersz i dodaj go ponownie do tabeli.

dt.Columns.Remove("Value"); 
dt.Columns.Add("Value", type(System.Int32), 0); 
Powiązane problemy