2011-01-13 114 views
0

我有一个DataGridView绑定到绑定到从Oracle数据库加载的数据表的绑定源。 (顺便说一句,我不认为数据库连接可能会导致此)datatable.GetChanges()总是显示DataGridView的第一行

我也DataGridViewComboBoxColumn绑定到一类的人(只有“有”的ID和名称),所以我可以显示/允许编辑名称而不是ID。我的问题是现在,在数据绑定完成后,c#自动“选择”DGV的第一个单元格 - 请参阅附加的图片。

alt text

我也有使用这小小的一段代码,以确保数据的完整性:

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); 
+0

关于编辑2:这不完全是一个空对象,您应该将您的blankPerson的主键设置为DBNull.Value。虽然国际海事组织,更简单的方法来解决您的问题,而不触及前端的任何东西是只使用UNION SELECT NULL,NULL在您的查询,ADO.NET会自动将这些NULL转换为相应的.NET类型(即DBNull.Value);我使用了相同的技术,它的工作原理。但首先,让您的DtoPerson的主键为对象类型,以便您的ORM/DAL可以为其分配DBNull – 2011-01-25 23:45:09

回答

0

尝试将空在DataGridViewComboBoxColumn的DataSource。例如:

SELECT id, description 
FROM yourTable 
UNION 
SELECT NULL, NULL 
+0

我在数据源中有一个空Object(请参阅我的编辑) – basti 2011-01-21 13:10:02

0
GridViewName.ClearSelection(); 
+0

这里不会工作:( – basti 2011-01-13 16:46:15