2014-11-21 63 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