我想完成一个非常简单的任务,但是到目前为止,这里的解决方案或其他找到的解决方案都没有帮助我:
我有一个WPFDataGrid
,它绑定到类型化数据集。当我单击窗口中的“确定”按钮时,我想检测当前是否存在任何行验证错误。我想显示一个消息框并告诉用户解决这些错误。
我怎样才能实现这个目标?
EDIT
为了让我的问题更精确一点:
我绑定的类型化数据集是一个包含表的简单数据集。这些表是通过调用 WCF 服务来填充的,表中有 5 个文本列。其中一些列有长度限制(例如,一列只能占用 5 个字符)。
The ItemsSource
of my GridView
在代码中设置如下:
dgvData.ItemsSource = m_dataModel.TableName;
如果我在列中输入一些文本,一切都很好。在该列中输入超过 5 个字符,该行旁边会显示红色行错误标记。我还没有进行任何自定义验证。
我可以看到红色感叹号,但我无法在代码中确定它是否可见。我尝试过:
- 使用数据集的
HasErrors
财产(回报false
)
-
Validation.GetHasErrors(dgvData)
回报false
as well
- H.B. 在他的评论中提到了解决方案,但它不起作用
我在这里不知所措 - 一定有一种简单的方法可以做到这一点?
好的,我已经解决了。以下是我想要的:
public static DataGridRow GetRow(DataGrid grid, int index)
{
DataGridRow row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index);
if (row == null)
{
// May be virtualized, bring into view and try again.
grid.UpdateLayout();
grid.ScrollIntoView(grid.Items[index]);
row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index);
}
return row;
}
在我的“确定”按钮的代码中,我这样做:
for (int i = 0; i < dgvData.Items.Count; i++)
{
DataGridRow row = GetRow(dgvData, i);
if (row != null && Validation.GetHasError(row))
{
hasDataGridErrors = true;
break;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)