datatable.GetChanges()始终显示DataGridView的第一行

时间:2011-01-13 12:16:43

标签: c# winforms datagridview datatable bindingsource

我有一个DataGridView,其绑定源绑定到从Oracle数据库加载的数据表。 (顺便说一句。我认为数据库连接不会导致这种情况)

我还有一个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:我在ComboBox-DataSource上还有一个空的Object'

  DtoPerson blankPerson = new DtoPerson();
  blankPerson.Name = String.Empty;
  blankPerson.PersonRollenId = -1;
  personList.Add(blankPerson);

2 个答案:

答案 0 :(得分:0)

GridViewName.ClearSelection();

答案 1 :(得分:0)

尝试在DataGridViewComboBoxColumn的DataSource中放置一个null。例如:

SELECT id, description
FROM yourTable
UNION
SELECT NULL, NULL