当使用DataError事件时,如何获得要解析的e.Context
本文关键字:Context 何获得 DataError 事件 | 更新日期: 2023-09-27 18:28:26
我目前有一个数据网格视图,用户可以使用它来输入数据。为了捕捉不正确的格式,我搜索并读取了事件DataError
。我发现的几个样本似乎都认为e.Context
有一个像这样的DataGridViewDataErrorContext
if (e.Context == DataGridViewDataErrorContexts.Commit)
{
MessageBox.Show("Commit error");
}
但是,当我尝试在测试网格上实现相同的东西时,我得到了以下e.Context
。它有一个这样的列表:Parsing | Commit | CurrentCellChange
e.Context 屏幕截图
请注意,e.Context
的值是一个值列表,而不是像在线示例代码那样的单个值。我是做错了什么还是错过了一步?如何将其分开?
我正在使用VS 2010教授
提前感谢!
不确定它是正确的路径,但我最终对它进行了轻微修改以使其正常工作。
//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
中的内容
对于.NET Framework 4,我认为首选的方法是使用Enum.HasFlag方法。当然,这应该与用[Flags]属性标记的枚举类型一起使用(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);
}