2009-11-03 9 views
16

I'v 몇 가지 문제를 가지고, 나는 DataGridView에 내 데이터를 저장하는 DataTable을 사용합니다. ,DataTable에서 데이터를 변경하는 방법은 무엇입니까?

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

내가 디버깅, ItemArray 내가 원하는 행을 나타냅니다의 좋아요 그래서하지만 : 나는 코드를 사용

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; 

가 지금은 일부 변경하고 싶은 : 데이터는 다음과 같이 inputed했다 아직도 나는 어떤 변화도 할 수 없다. 뭐가 잘못 됐니? DataTable을 업데이트하는 방법 ??? 나는 인터넷 검색을하고 있는데 당신이 그것을 수정하면

답변

14

dt.Rows[1].ItemArray 당신에게 항목 배열의 복사본을 제공 :(아무것도, 당신은 원본을 수정하지있어

당신은 단순히이 수행 할 수 있습니다..

dt.Rows[1][3] = "Value"; 
을 모든 행의 값을 수정하고자 할 때

ItemArray 속성이 사용됩니다.

예 :

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

는 SetField 방법을 시도해보십시오

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

이 작업을 수행하고 사용하여 행 [I] [J]보다 약간 "청소기"입니다 받아야합니다.

+0

+1 - 난 당신의 제안 배열을 사용하여 예제보다 훨씬 깨끗, 동의합니다. 귀하의 예제는 배열의 위치 별 암시 된 필드보다는 이름으로 필드의 명확한 식별을 허용합니다. 나는 배열의 사용이 저렴하고 게으른 것이라고 생각한다. 그것은 미래의 유지 보수 동안 오류의 위험을 가장 분명하게 제기합니다. 또한 데이터 테이블 개체가 데이터베이스 구조에서 파생되고 해당 데이터베이스 구조가 테이블 정의의 중간에 열을 삽입하는 등 변경해야하는 경우 배열 메서드를 사용하면 런타임 오류가 발생할 수 있습니다 또는 악화 - 감지되지 않은 손상된 데이터. – barrypicker

7

는 당신은 아마 속성을 설정해야합니다 dt.Columns["columnName"].ReadOnly = false; 전에.

+2

dt.columns [n] .ReadOnly이어야합니다. –

관련 문제