我正在测试它的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
答案 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");
}
}