2009-11-03 11 views
16

Mam pewien problem, używam DataTable do przechowywania moich danych w dataGridView. Dane inputed tak:C# jak zmienić dane w DataTable?

dt = new DataTable(); 
dt.Columns.Add("ID", typeof(int)); 
dt.Columns.Add("par", typeof(string)); 
dt.Columns.Add("max", typeof(int)); 
dt.Columns.Add("now", typeof(int)); 

dt.Rows.Add(new object[] { id++,i + " " + j++, strarr[0], strarr[1] }); // ... etc etc 

dataGridView1.DataSource = dt; 

teraz chcę zrobić kilka zmian, używam kod:

dt.Rows[1].ItemArray[3] = "VALUE"; 

Kiedy debugowanie, tablicy ItemArray reprezentuje wiersz chcę, więc jego okey, ale wciąż nie mogę wprowadzić żadnych zmian, co jest nie tak? Jak zaktualizować DataTable ??? Ja googlowania i nic :(

Odpowiedz

14

dt.Rows[1].ItemArray daje kopii tablic poz Kiedy ją zmodyfikować, jesteś nie modyfikując oryginał

można po prostu to zrobić..

dt.Rows[1][3] = "Value"; 

nieruchomość tablicy ItemArray jest używany, gdy chcemy modyfikować wszystkie wartości rzędu.

np .:

dt.Rows[1].ItemArray = newItemArray; 
38

spróbować metody SetField:

table.Rows[i].SetField(column, value);
table.Rows[i].SetField(columnIndex, value);
table.Rows[i].SetField(columnName, value);

ten powinien otrzymać pracę i jest nieco "czystsze" niż przy użyciu Wiersze [i] [j].

+0

+1 - Zgadzam się, Twoja sugestia jest znacznie czystsza niż w przykładach wykorzystujących tablicę. Twój przykład pozwala na wyraźną identyfikację pola po nazwie, a nie zaimplementowane pole według pozycji w tablicy. Myślę, że wykorzystanie tablicy jest tanie i leniwe. Z całą pewnością zwiększa ryzyko błędów podczas przyszłej konserwacji. Ponadto, jeśli obiekt tabeli danych pochodzi ze struktury bazy danych, a struktura bazy danych, w której należy dokonać zmiany, na przykład wstawienie kolumny w środku definicji tabeli, użycie metody tablicy może potencjalnie spowodować błąd czasu wykonywania lub gorzej - niewykryte uszkodzone dane. – barrypicker

7

Powinieneś wcześniej ustawić właściwość dt.Columns["columnName"].ReadOnly = false;.

+2

Powinien to być dt.kolumny [n] .ReadOnly –