C# 防止gridview在验证失败时失去焦点

C# 防止gridview在验证失败时失去焦点,c#,winforms,gridview,telerik,C#,Winforms,Gridview,Telerik,我在表单上有一个Telerik radGridView,它实现了单元格和行验证。没问题,效果很好 当我留下一行不完整,然后单击表单其他地方的Save按钮时,问题就出现了。下面的RowValidating代码段不起作用,因为一旦焦点从gridview移到Save按钮,if(row!=null)总是false,并且RowValidating代码永远不会执行 private void radGridView1_RowValidating(object sender, RowValidatingEve

我在表单上有一个Telerik radGridView,它实现了单元格和行验证。没问题,效果很好

当我留下一行不完整,然后单击表单其他地方的Save按钮时,问题就出现了。下面的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;
            }

如何在网格中保持焦点,以确保在允许用户离开网格并保存之前整个网格都已验证?

请尝试同时给出这两个条件

private void radGridView1_RowValidating(object sender, RowValidatingEventArgs e)
{
    var row = e.Row as GridViewDataRowInfo;        
        var value = row.Cells["cboUnit"].Value.ToString();
        if (string.IsNullOrEmpty(value) && row != null)
        {
            e.Cancel = true;
            row.ErrorText = "Unit Number is a required field";
        }

        else
        {
            row.ErrorText = string.Empty;
        }

我还没有尝试过这些代码,但希望这能有所帮助

我不熟悉Telerik控件,但我知道标准的
DataGridView
仅在
CurrentRow
更改时触发
RowValidating
事件。如果网格整体失去焦点,但
CurrentRow
保持不变,我相信您必须自己触发验证(例如调用
Form.ValidateChildren()
方法)。我将尝试其他方法触发验证-Form.ValidateChilden()无论网格的条件是什么,都返回true。您也可以尝试
Form.Validate()
。如果所有其他操作都失败,您可以尝试设置
grid.CurrentCell=null
,这将引发
InvalidOperationException
。谢谢。但是这种方法的问题是,如果值==if(string.IsNullOrEmpty(value)…),代码就会失败null@PeterJ因此,请给出Or运算符,而不是AND(&&)。这里我使用And运算符。而不是给出| |,这样它可以检查两个条件,如果其中任何一个条件都失败,它仍然会工作。问题是,当row==null返回true时,string.IsNullOrEmpty也会自动为true,因此代码永远不会执行。我想我可能忽略了一些愚蠢的事情,但在尝试了几乎所有可以想象的选项排列两天后,我仍然被卡住了!