2012-01-20 40 views
0

拒絕更改後刪除驗證錯誤,我有一個DataGrid,這勢必類型化DataTable,像這樣:上的DataGrid

<DataGrid ItemsSource="{Binding Path=MyTypedDataTable}" ... /> 

DataGrid也有RowValidationRule。在一種情況下,一切正常,可以免除:當連續出現錯誤時,按下撤消按鈕(MyTypedDataTable.RejectChanges());驗證錯誤仍然存​​在,該行中的數據仍然相同。在沒有錯誤的情況下,RejectChanges()正常工作。

如何使驗證錯誤消失?預先感謝您的建議。

+0

你應該考慮看代碼執行在那裏,它是在客戶端或服務器上,你需要刷新頁面? – MrFox

+0

@MrFox它不是一個web應用程序... – Vale

+0

我使用ColumnChanging和SetRowError進行驗證。我沒有問題。也許你可以發佈你的RowValidationRule的東西? – blindmeis

回答

0

我使用這個,它適用於我的項目。

public class RowDataValidationRule : ValidationRule 
{ 
    public override ValidationResult Validate(object value, CultureInfo cultureInfo) 
    { 
     BindingGroup group = (BindingGroup)value; 
     foreach (var item in group.Items) 
     { 
      DataRowView rowView = item as DataRowView; 
      DataRow row; 

      if (rowView != null) 
       row = rowView.Row; 
      else 
       row = item as DataRow; 

      if (row != null && row.HasErrors) 
      { 
       var errorColumns = row.GetColumnsInError(); 
       StringBuilder sb = new StringBuilder(); 
       foreach (var column in errorColumns) 
       { 
        sb.AppendLine(row.GetColumnError(column)); 
       } 

       return new ValidationResult(false, sb.ToString()); 
      } 

     } 
     return ValidationResult.ValidResult; 
    } 
} 

XAML

<DataGrid ItemsSource="{Binding Path=MyListItems, Mode=OneWay, ValidatesOnDataErrors=true, ValidatesOnExceptions=true}"> 
      <DataGrid.RowValidationRules> 
       <Base:RowDataValidationRule /> 
      </DataGrid.RowValidationRules> 
</DataGrid> 
+0

我試過一樣,但錯誤仍然存​​在後RejectChanges ... – Vale

+0

奇怪...作品像一個魅力對我:( – blindmeis