0

我目前有一个用户用来输入数据的 datagridview。为了捕捉错误的格式,我搜索并阅读该事件DataError是要走的路。我发现的少数样本似乎都认为e.Context有一个DataGridViewDataErrorContext这样的。

if (e.Context == DataGridViewDataErrorContexts.Commit)    
{    
    MessageBox.Show("Commit error");    
}

但是当我尝试在测试网格上实现相同的事情时,我得到了以下内容e.Context。它有一个这样的列表:Parsing | Commit | CurrentCellChange

e.Context 截图

请注意,值e.Context是一个值列表,而不是像在线示例代码那样显示的单个值。我是在做错事还是错过了一步?那是怎么分开的?

我正在使用 VS 2010 教授。

提前致谢!

4

2 回答 2

1

不确定这是正确的路径,但我最终对其进行了一些修改以使其正常工作。

    //if (e.Context == DataGridViewDataErrorContexts.Commit)
    if (e.Context.ToString().Contains(DataGridViewDataErrorContexts.Commit.ToString()))
    {

              MessageBox.Show("Commit error");
    }

    //if (e.Context == DataGridViewDataErrorContexts.CurrentCellChange)
    if (e.Context.ToString().Contains(DataGridViewDataErrorContexts.CurrentCellChange.ToString()))
    {

              MessageBox.Show("Cell change");
    }

    //if (e.Context == DataGridViewDataErrorContexts.Parsing)
    if (e.Context.ToString().Contains(DataGridViewDataErrorContexts.Parsing.ToString()))
    {

              MessageBox.Show("Parsing error");
    }

    //if (e.Context == DataGridViewDataErrorContexts.LeaveControl)
    if (e.Context.ToString().Contains(DataGridViewDataErrorContexts.LeaveControl.ToString()))
    {

              MessageBox.Show("Leave control error");
    }

这让我可以检查里面有什么e.Context

于 2013-08-22T19:03:22.707 回答
0

从 .NET Framework 4 开始,我认为首选方法是使用Enum.HasFlag方法。当然,这应该与用 [Flags] 属性标记的 Enum 类型一起使用(DataGridViewDataErrorContexts就是其中之一)。

我最近刚刚写了这个小助手方法,你可能会发现它很有帮助:

private string ReadableDataGridViewContext(DataGridViewDataErrorContexts context)
{
    var translations = new Dictionary<DataGridViewDataErrorContexts, string> {
        { DataGridViewDataErrorContexts.ClipboardContent, "Copying Data to the Clipboard" },
        { DataGridViewDataErrorContexts.Commit, "Committing Data" },
        { DataGridViewDataErrorContexts.CurrentCellChange, "Moving Focus to a different Cell, due to error in the Cell being left" },
        { DataGridViewDataErrorContexts.Display, "Displaying Data in a Cell" },
        { DataGridViewDataErrorContexts.Formatting, "Formatting Data" },
        { DataGridViewDataErrorContexts.InitialValueRestoration, "Restoring Cell Data" },
        { DataGridViewDataErrorContexts.LeaveControl, "Leaving the Grid" },
        { DataGridViewDataErrorContexts.Parsing, "Parsing Data" },
        { DataGridViewDataErrorContexts.PreferredSize, "Calculating the preferred size for a Cell" },
        { DataGridViewDataErrorContexts.RowDeletion, "Deleting a Row" },
        { DataGridViewDataErrorContexts.Scroll, "Scrolling over the Grid" }
    };

    var list = (from contextFlag in translations.Keys
                    where context.HasFlag(contextFlag)
                    select translations[contextFlag]).ToList();
    return String.Join(",", list);
}
于 2014-03-18T14:36:48.857 回答