2014-11-21 84 views
0

我无法弄清楚为什么使用分配的正则表达式的focusout验证在devex文本框中不起作用。当我使用网格中的文本框时,它会根据需要开始工作。请提出解决方案。如何在Javasacript中验证Devexpress Gridview中的Devexpress文本框

@Html.DevExpress().GridView(settings => 
{ 
    settings.Columns.Add(column => 
     { 
      column.FieldName = "InYear"; 
      column.Caption = "In Year"; 
      column.Width = 100; 
      column.ColumnType = MVCxGridViewColumnType.TextBox; 
      column.SortOrder = DevExpress.Data.ColumnSortOrder.Ascending; // Default 
      column.SortIndex = 1; 
      column.CellStyle.HorizontalAlign = HorizontalAlign.Left; 
      var txtProperties = column.PropertiesEdit as TextBoxProperties; 
      txtProperties.Width = Unit.Percentage(100); 
      txtProperties.MaxLength = 4; 
      txtProperties.DisplayFormatInEditMode = true; 
      txtProperties.ValidationSettings.RequiredField.IsRequired = true; 
      txtProperties.ValidationSettings.ValidateOnLeave = true; 
      txtProperties.ValidationSettings.RegularExpression.ValidationExpression = @"\d{4}"; 
      txtProperties.ValidationSettings.RegularExpression.ErrorText = "Expected format is: YYYY"; 
      txtProperties.ClientSideEvents.ValueChanged = String.Format("function (s, e) {{ OnValueChanged(s, e, '{0}', {1}); }}", "InYear", "0"); 
      column.SetDataItemTemplateContent(c => 
      { 
       if (!(bool)DataBinder.Eval(c.DataItem, "ReadOnly")) 
       { 
        Html.DevExpress().TextBox(txtSettings => 
        { 

         txtSettings.Name = "txtInYear_" + c.KeyValue.ToString(); 
         txtSettings.Width = Unit.Percentage(100); 
         txtSettings.Properties.MaxLength = 4; 
         txtSettings.Properties.DisplayFormatInEditMode = true; 
         txtSettings.Properties.ValidationSettings.ValidateOnLeave = true; 
         txtSettings.Properties.ValidationSettings.ValidationGroup = c.KeyValue.ToString(); 
         txtSettings.Properties.ValidationSettings.RegularExpression.ValidationExpression = @"[0-9]{4}"; 
         txtSettings.Properties.ValidationSettings.RegularExpression.ErrorText = "Expected format is: YYYY"; 
         txtSettings.Properties.ClientSideEvents.ValueChanged = String.Format("function (s, e) {{ OnValueChanged(s, e, '{0}', {1}); }}", c.Column.FieldName, c.KeyValue); 
        }).Bind(DataBinder.Eval(c.DataItem, c.Column.FieldName)).Render(); 


       } 
       else 
        Html.DevExpress().Label(lblSettings => 
        { 
         lblSettings.Name = "lblInYear_" + c.KeyValue.ToString(); 
         lblSettings.Width = Unit.Percentage(100); 
        }).Bind(DataBinder.Eval(c.DataItem, c.Column.FieldName).ToString()).Render(); 
      }); 
     }); 
}).Bind(Model).GetHtml() 

编辑:我正在使用GridView的按钮来触发更新命令。我如何触发只验证EditRow的事件。请查看附件图像。

enter image description here 预先感谢

回答

0

一个长期的斗争我得到了以下的答案后:

  • 指定验证组属性嵌套控件下方

    txtSettings.Properties.ValidationSettings.ValidationGroup = c.KeyValue.ToString();

  • 迭代通过客户端上的键值,并调用的DevExpress验证功能ASPxClientEdit.ValidateEditorsInContainer如下,表示验证组名称

    变种的isValid =!ASPxClientEdit.ValidateEditorsInContainer(GridName.GetMainElement()我)

我的做法可能不是最好的,但它帮助了我很多,我认为这也将是有同样的问题别人有帮助的。

谢谢.....

0

你什么时候需要验证的文本框?在浏览器模式下还是在编辑时?当你编辑一行时,你的TextBox是必需的。尝试在模板中设置TextBox的IsRequired属性。

txtSettings.Properties.ValidationSettings.RequiredField.IsRequired = true; 

它应该工作。

enter image description here

+0

嗨,这只适用于当文本框为空。如果它包含无效数据,则不显示错误。实际上,默认视图包含一个始终可在网格视图内编辑的文本框。保存功能由另一个按钮通过ajax请求完成。 – Mayank 2014-11-24 05:59:14

+0

它适合我。我附上截图给我的答案。 – 2014-11-24 19:14:09

0