2009-11-03 40 views
16

I'v có một số vấn đề, tôi sử dụng DataTable để lưu trữ dữ liệu của tôi trong dataGridView. dữ liệu được inputed như thế này:C# cách thay đổi dữ liệu trong 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; 

bây giờ tôi muốn làm một số thay đổi, tôi sử dụng mã:

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

Khi tôi gỡ lỗi, ItemArray đại diện cho hàng tôi muốn, vì vậy okey của nó, nhưng Tôi vẫn không thể thực hiện bất kỳ thay đổi nào, có gì sai? Làm thế nào để cập nhật DataTable ??? Tôi googling và không có gì :(

Trả lời

14

dt.Rows[1].ItemArray cung cấp cho bạn một bản sao của mảng mục Khi bạn sửa đổi nó, bạn sẽ không thay đổi bản gốc

Bạn chỉ có thể làm điều này:..

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

tài sản ItemArray được sử dụng khi bạn muốn thay đổi tất cả các giá trị liên tiếp.

cũ .:

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

Hãy thử phương pháp SetField:

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

này nên được công việc làm và là một chút "bụi" vì sử dụng dòng [i] [j].

+0

+1 - Tôi đồng ý, đề xuất của bạn sạch hơn nhiều so với các ví dụ sử dụng mảng. Ví dụ của bạn cho phép xác định rõ ràng trường theo tên, thay vì trường được ngụ ý theo vị trí trong một mảng. Tôi nghĩ rằng việc sử dụng các mảng là giá rẻ và lười biếng. Nó chắc chắn nhất làm tăng nguy cơ lỗi trong thời gian bảo trì trong tương lai. Ngoài ra, nếu đối tượng bảng dữ liệu có nguồn gốc từ cấu trúc cơ sở dữ liệu và nếu cấu trúc cơ sở dữ liệu đó thay đổi, chẳng hạn như chèn một cột ở giữa định nghĩa bảng, việc sử dụng phương thức mảng sẽ có khả năng tạo ra lỗi thời gian chạy hoặc tệ hơn - dữ liệu bị hỏng không bị phát hiện. – barrypicker

7

Có lẽ bạn nên đặt thuộc tính dt.Columns["columnName"].ReadOnly = false; trước đây.

+2

Phải là dt.columns [n] .Chỉ là –

Các vấn đề liên quan