fazzy
fazzy

Reputation: 211

C# how to change data in DataTable?

I'v got some problem, I use DataTable to store my data in dataGridView. Data was inputed like this:

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;

now I want to do some changes, I use code:

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

When I debug, ItemArray represents the row I want to, so its okey, but still I can't do any changes, whats wrong ? How to update DataTable ??? I'm googling and nothing :(

Upvotes: 21

Views: 116764

Answers (3)

gons
gons

Reputation: 81

You should probably set the property dt.Columns["columnName"].ReadOnly = false; before.

Upvotes: 8

ynnckcmprnl
ynnckcmprnl

Reputation: 4352

Try the SetField method:

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

This should get the job done and is a bit "cleaner" than using Rows[i][j].

Upvotes: 50

manji
manji

Reputation: 47978

dt.Rows[1].ItemArray gives you a copy of item arrays. When you modify it, you're not modifying the original.

You can simply do this:

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

ItemArray property is used when you want to modify all row values.

ex.:

dt.Rows[1].ItemArray = newItemArray;

Upvotes: 18

Related Questions