2013-03-11 3 views
0

웹에서 답변을 검색했지만 찾지 못했습니다. 이것은 C# winforms입니다. 입니다 이런 식으로 뭔가 할 수 있습니다 :datagridview 행 셀 값

private void datagridItems_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
{ 
int ID; 
DataGridViewRow row = this.datagridItems.Rows[e.RowIndex]; 
DataGridViewCell cell = row.Cells[e.ColumnIndex]; 

if (row.Cells[2].Value == some value) 
{ 
//set the value of a cell 
row.Cells[4].Value = new value; 
} 
} 

내가 셀의 기존 내용을 삭제해야을 [4] 전지 [2]에서 다른 기준에 따라.

도움 주셔서 감사합니다. Ryan

+0

상기 방법에서? 'e'는 무엇입니까? – bas

+0

'e'는 일부 이벤트 처리기에 있음을 보여줍니다. 정확히 어느 것인가? 페이지/제어 수명주기가 너무 늦으면 모든 변경 사항이 무시됩니다. 일부 데이터 바운드 이벤트에 있어야합니다. 아마도'DataGrid_RowDataBound'입니다. – J0HN

+0

예, 가능합니다. 위의 코드를 사용해 보셨습니까? 어떤 문제가 있었습니까? – Melanie

답변

2

DataGridView가 데이터 바인딩 된 경우 셀 내용을 직접 수정하면 안됩니다. 대신 데이터 바인딩 된 객체를 수정해야합니다. 당신은에 DataGridViewRow의 DataBoundItem을 통해 해당 개체에 액세스 할 수 있습니다 바운드 개체에서 INotifyPropertyChanged 이벤트를 지원하지 않는 경우

MyObject obj = (MyObject)dataGridView.CurrentRow.DataBoundItem; 
obj.MyProperty = newValue; 

나중에 그리드를 새로 고칩니다.

+0

의미가 있습니다. 왜 직접 셀을 수정하고 싶지 않습니까? 나는 더 많은 것을 이해하고 싶다. Thx – Ryan

+0

바인딩 할 개체에 따라 셀을 변경해도 기본 개체가 변경되지 않을 수 있습니다. 그래서 나중에 다른 함수에서 바운드 된 객체를 사용할 때. 표에서 보는 것과 코드 뒤에 표시되는 내용이 다를 수 있습니다. –

+0

안녕하세요 .. 라이언 .. 당신이 언급 한 것이 맞습니다 ... 나는 내 Windows 응용 프로그램에 대한 업데이트 진술 작업을하기 위해 많은 어려움을 겪고 있습니다 ... 문제는 제가 pagge 현명한 디스플레이를위한 다른 기능의 데이터 소스에 그리드를 바인딩하고 있습니다. ... 그리드를 업데이트하려고 시도했을 때 백엔드 SQL 데이터베이스에서 업데이트되지 않았습니다.이 문제에 대한 해결책이 있습니까? –