我目前有一个用户用来输入数据的datagridview。为了捕获错误的格式,我搜索并读取事件DataError
是要走的路。我发现的几个样本似乎都认为e.Context
有一个DataGridViewDataErrorContext
就是这样。
if (e.Context == DataGridViewDataErrorContexts.Commit)
{
MessageBox.Show("Commit error");
}
但是当我尝试在测试网格上实现相同的东西时,我得到了e.Context
的以下内容。它有一个如下列表:Parsing | Commit | CurrentCellChange
请注意,e.Context
的值是一个值列表,而不是像在线示例代码那样的单个值。我做错了什么或错过了一步吗?如何将其分开?
我正在使用VS 2010教授。
提前致谢!
答案 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);
}