我有一个DataGridView绑定到绑定到从Oracle数据库加载的数据表的绑定源。 (顺便说一句,我不认为数据库连接可能会导致此)datatable.GetChanges()总是显示DataGridView的第一行
我也DataGridViewComboBoxColumn绑定到一类的人(只有“有”的ID和名称),所以我可以显示/允许编辑名称而不是ID。我的问题是现在,在数据绑定完成后,c#自动“选择”DGV的第一个单元格 - 请参阅附加的图片。
我也有使用这小小的一段代码,以确保数据的完整性:
private void _table_ColumnChanging(object sender, DataColumnChangeEventArgs e)
{
if (e.Column == _table.Columns["NEEDED_ID"])
{
if (e.ProposedValue == null)
{
e.ProposedValue = System.DBNull.Value;
}
}
}
现在用这个_table.GetChanges()总是返回DGV的第一行是“修改“但价值并没有真正改变 - 它只是DBNull
而不是null
。我能否以某种方式避免自动选择第一个单元格或如何避免此行为?
编辑:与此同时,我发现将第一列更改为不可编辑修复此问题。但这只不过是一种解决方法。我真的很感激为此得到一个工作解决方案。
编辑2:我也有 '顶部' 的一个空的对象组合框,数据源
DtoPerson blankPerson = new DtoPerson();
blankPerson.Name = String.Empty;
blankPerson.PersonRollenId = -1;
personList.Add(blankPerson);
关于编辑2:这不完全是一个空对象,您应该将您的blankPerson的主键设置为DBNull.Value。虽然国际海事组织,更简单的方法来解决您的问题,而不触及前端的任何东西是只使用UNION SELECT NULL,NULL在您的查询,ADO.NET会自动将这些NULL转换为相应的.NET类型(即DBNull.Value);我使用了相同的技术,它的工作原理。但首先,让您的DtoPerson的主键为对象类型,以便您的ORM/DAL可以为其分配DBNull – 2011-01-25 23:45:09