2013-03-11 133 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 2013-03-11 20:59:04

+0

'e'表示您处于某个事件处理程序中。究竟哪一个?如果您在页面/控件生命周期中太迟,则所有更改都将被忽略。应该在某些数据绑定事件上,可能是'DataGrid_RowDataBound' – J0HN 2013-03-11 20:59:09

+0

是的,这是可能的。你有没有尝试过上面的代码?你有什么问题? – Melanie 2013-03-11 20:59:16

回答

2

如果DataGridView是数据绑定的,则不应该直接修改单元格的内容。相反,你应该修改数据绑定对象。你可以通过一个DataGridViewRow的DataBoundItem访问该对象:

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

刷新电网后,如果您绑定的对象不支持INotifyPropertyChanged的事件。

+0

有道理。为什么我不想直接修改单元格?我想进一步了解。 Thx – Ryan 2013-03-12 01:18:47

+0

根据您绑定的对象,对单元的更改可能不会更改您的基础对象。因此,稍后在另一个函数中使用有界对象时。您在网格上看到的内容以及您在代码中看到的内容可能会有所不同。 – 2013-03-14 10:01:57

+0

嗨瑞安..你提到的是正确的...我挣扎很多,使我的Windows应用程序的更新声明工作...问题是我绑定网格数据源在另一个功能pagge明智的显示数据源。 ...当我试图更新网格时,它并没有在后端SQL数据库中得到更新....是否有解决方案? – 2016-04-19 05:02:11