限制按钮点击telerik radgridview cellValidating事件 - winforms

时间:2014-05-10 08:06:46

标签: winforms telerik radgridview

我正在测试它的cellValidating事件,它有一些问题,或者可能是我遗漏了一些东西。当radgridview单元格处于编辑模式时,我无法点击表格上的任何地方。但当我点击按钮时,代码执行,我的表单挂起。所以我的问题是,当在cellValidating事件期间radgridview单元格处于编辑模式时,如何禁用按钮单击时的代码执行。注意:当我调试代码并在cellValidating事件和按钮上插入断点时。代码运行良好,按钮代码不执行。以下是我正在使用的代码。如果有人能立即回答,我将非常感谢他。

Private Sub rgv_CellValidating(sender As System.Object,e As Telerik.WinControls.UI.CellValidatingEventArgs)处理rgv.CellValidating

        Dim column As GridViewDataColumn = TryCast(e.Column, GridViewDataColumn)
    If TypeOf e.Row Is GridViewDataRowInfo AndAlso column IsNot Nothing AndAlso column.Name = "ProductId" Then
        If String.IsNullOrEmpty(DirectCast(e.Value, String)) OrElse DirectCast(e.Value, String).Trim() = String.Empty Then
            e.Cancel = True
            DirectCast(e.Row, GridViewDataRowInfo).ErrorText = "Validation error!"
        Else
            DirectCast(e.Row, GridViewDataRowInfo).ErrorText = String.Empty
        End If
    End If

2 个答案:

答案 0 :(得分:0)

你描述的关于按钮代码仍然执行的现象也适用于ribbonmenu按钮和ribbonmenutabs。挂起的问题我无法重现,所以我想它与你执行的按钮的代码有关。

对于可能的解决方法,您可以将私有变量放入表单中,并在cellvalidation代码中将错误发生时设置为true,如果没有错误发生则设置为false(并且在表单初始化代码中自然将其设置为false)。

然后在按钮代码中测试变量值,如果它是真的没有执行代码。

因此,如果您将bandform(或任何其他形式)作为类:

public partial class MF : RadRibbonForm
{
    private bool _hasValidationError;

    public MF()
    {
       ...//Normal construction handler code
       _hasValidationError = false;
    }

    void MF_CellValidating(objec sender, CellValidatingEventArgs e)
    {
         .....//Do validation and set e.Cancel true if the validation fails.
        if (e.Cancel)
        {
            hasValidationError = true;
        }
        else
        {
           hasValidationError = false;
        }
    }

    private void MyButton_Click(object sender, EventArgs e)
    {
        if (_hasValidationError)
        {
           // Before return you could put in a messagebox that there are cell errors that need to be looked at first
           return;
        }
        else
        {
            .......//Button code execution occurs here
        }
    }

使用此代码,您可以确保不希望执行的按钮代码不会在Cell验证错误上执行。

代码在C#中,但对于VB winforms应该类似。

答案 1 :(得分:0)

这似乎是网格issue link的已知问题。

还有解决问题的方法:

bool validating = false;

void radGridView1_CellValidating(object sender, Telerik.WinControls.UI.CellValidatingEventArgs e)
{
    if (e.Value.ToString().Length < 5)
    {
        e.Cancel = true;
        validating = true;
        e.Row.ErrorText = "Validation error!";
    }
    else
    {
        validating = false;
    }
}

private void radButton1_Click(object sender, EventArgs e)
{
     if (!validating)
     {
         Debug.WriteLine("Executed");
     }
 }