C#DataGridView单元格在选中时自动清除

C#DataGridView单元格在选中时自动清除,c#,winforms,datagridview,event-handling,C#,Winforms,Datagridview,Event Handling,我有一个windows窗体应用程序,其中有一个DataGridView(DGV)。我使用VisualStudioUI向DGV添加列,然后以编程方式添加带有一些默认值的行。我的问题是,一旦添加了行,任何选定的单元格都会自动清空其中的任何值,甚至是只读单元格 我只处理DGV的“CellValueChanged”事件,所做的只是验证行,以确保至少存在一个有效的值组合,然后启用一个按钮 更令人困惑的是,选定的单元格清除问题并不总是发生。添加行后,在进行更改或执行用行重新加载DGV的操作之前,所有单元格都

我有一个windows窗体应用程序,其中有一个DataGridView(DGV)。我使用VisualStudioUI向DGV添加列,然后以编程方式添加带有一些默认值的行。我的问题是,一旦添加了行,任何选定的单元格都会自动清空其中的任何值,甚至是只读单元格

我只处理DGV的“CellValueChanged”事件,所做的只是验证行,以确保至少存在一个有效的值组合,然后启用一个按钮

更令人困惑的是,选定的单元格清除问题并不总是发生。添加行后,在进行更改或执行用行重新加载DGV的操作之前,所有单元格都将清除。在那之后,要么有一部分细胞,要么没有一个细胞会自行清除

有没有人经历过这种情况,或者知道解决问题的方法?我从谷歌得到的只是“如何使细胞清晰”之类的东西

谢谢

  • 马特
*更新*

用于将新行添加到DGV的代码:

        metaMapGrd.Rows.Clear();
        ((DataGridViewComboBoxColumn)metaMapGrd.Columns[1]).DataSource = _excel.ListHeaders(worksheetListCmb.SelectedItem.ToString());
        foreach (Field f in _sharePoint.CurrentFieldList)
        {
            // skip the key field matching portion.  These should be for comparison only.
            if (f.Title == spListKeyCmb.SelectedItem.ToString())
            {
                continue;
            }

            DataGridViewRow row = new DataGridViewRow();

            metaMapGrd.Rows.Add(row);

            DataGridViewTextBoxCell spcell = new DataGridViewTextBoxCell();
            spcell.Value = f.Title;
            spcell.ToolTipText = f.TypeAsString;
            row.Cells["spListColumn"] = spcell;

            DataGridViewCheckBoxCell fcell = new DataGridViewCheckBoxCell();
            fcell.Value = true;
            row.Cells["useThisColumn"] = fcell;
        }
        metaMapGrd.CurrentCell = null;

根据我们的聊天,我建议不要尝试手动处理DatagridView,而是使用DataObjects的基础列表,然后将DGV数据绑定到该列表

使用隐藏列获取有关SharePoint ColumnType的信息


Hoipe这很有帮助。

您也在数据绑定datagridview吗?不,只是添加行。它也需要数据绑定吗?取决于您的用例。。。因此,您基本上希望在代码中处理网格的内容?另外,您能否提供一些示例代码来解释如何在单元格中设置值?我想为特定列的每一行添加工具提示。否则,我不反对将这个该死的东西绑定到一个列表。要提供更多关于聊天的详细信息,建议使用BindingSource对象。我这样做了,并将数据对象的列表分配给了它,它工作得非常好。没有工具提示,但我仍然得到了我需要使用和显示的信息,这些信息是有意义的,而且同样重要的是,它们是有效的。