在使用DataError事件时,如何解析e.Context?

时间:2013-08-21 15:31:49

标签: c# datagridview

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

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

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

Screenshot of e.Context

请注意,e.Context的值是一个值列表,而不是像在线示例代码那样的单个值。我做错了什么或错过了一步吗?如何将其分开?

我正在使用VS 2010教授。

提前致谢!

2 个答案:

答案 0 :(得分: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

中的内容

答案 1 :(得分: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);
}
相关问题