我有一个Telerik radGridView窗体上有一个单元格和行验证实施。没问题,运作良好。如果验证失败,防止gridview失去焦点
问题出现时,我留下一行不完整,然后单击窗体上其他位置的保存按钮。下面的RowValidating代码片段不起作用,因为一旦焦点从gridview移动到Save按钮,if(row!= null)总是为false,并且RowValidating代码永远不会执行。
private void radGridView1_RowValidating(object sender, RowValidatingEventArgs e)
{
var row = e.Row as GridViewDataRowInfo;
if (row != null)
{
var value = row.Cells["cboUnit"].Value.ToString();
if (string.IsNullOrEmpty(value))
{
e.Cancel = true;
row.ErrorText = "Unit Number is a required field";
}
else
{
row.ErrorText = string.Empty;
}
我怎么能留住焦点在网格中,以确保他整个网格允许用户离开电网,并保存之前验证?
我对Telerik控件并不熟悉,但是我知道标准'DataGridView'只在'CurrentRow'发生变化时触发'RowValidating'事件。如果整个网格失去焦点,但'CurrentRow'保持不变,我相信你必须自己触发验证(例如调用Form.ValidateChildren()方法)。 – JosephHirn
我会尝试替代方法来触发验证 - 无论网格的状况如何,Form.ValidateChilden()都会返回true。 – PeterJ
你也可以尝试'Form.Validate()'。如果一切都失败了,你总是可以设置'grid.CurrentCell = null',它应该抛出'InvalidOperationException'。 – JosephHirn