2014-09-26 92 views
0

我有一個DataTable,我綁定到WPF中的DataGrid。在XAML中沒有生成列,當我在代碼中創建DataTable時,所有事情都完成了。直接綁定到DataTable時驗證DataGrid數據 - C#/ WPF

我有2路綁定,所以用戶可以更新DataGrid中的值,它將更新DataTable,雖然這不是我調試時可以看到的事件,但我的結果顯示它按預期工作。

但是,如果列的類型是double,並且用戶輸入文本,則該單元格的現有DataTable數據將被保留,單元格將以紅色標出,而我的調試器輸出會顯示FormatException發生。

我所想要做的是能夠之一:

一)處理這個異常,並顯示一個警告用戶在我UI

二)有一定可設置自定義的驗證方法在我的代碼標誌,我可以用來處理在某些時候的錯誤

我不介意我去哪個解決方案,我只是不希望用戶不會注意到錯誤。

謝謝。

回答

0

如果你想留在ado.net和數據表,然後:http://msdn.microsoft.com/en-us/library/1120xds5.aspx

編輯:

this.MyTable.ColumnChanging += MyTableColumnChangingStuff; 

    private void MyTableColumnChangingStuff(object sender, DataColumnChangeEventArgs e) 
    { 
     if(e.Column.ColumnName == "MyColumnTestName") 
     { 
      var errormsg = MyValidateTestNameMethod(e.ProposedValue); 
      e.Row.SetColumnError(e.Column.ColumnName, errormsg); 
     } 
     //... 
    } 

編輯2:

謝謝,只是給一個嘗試,而事件當我修改正確類型的數據時,它會被調用,如果用戶輸入的數據類型 錯誤,它不會被調用。與之前相同,框 以紅色突出顯示,格式異常由wpf處理,但不調用 事件。

那是真的。對我來說只有2個解決方案。首先爲您的輸入控件創建行爲,您可以確保這些值始終可以轉換爲您的基礎類型。另一種解決方案就是你的viewmodel綁定到的只是string類型的屬性。這樣做的好處是 - 你從來沒有因爲投射類型而獲得綁定感染。你現在要做的是在你檢查你的字符串屬性的地方實現IDataErrorInfo。當你去你的模型時,你必須將你的字符串值轉換爲正確的類型。

直到現在我使用第一種方法,因爲我使用datepicker,數字行爲並沒有任何其他類型。

+0

感謝您的回覆,我無法遵循,因爲我沒有任何數據集可以在數據集設計器中打開。我在我需要的類的實例中創建並填充綁定的數據表。 – 2014-10-01 13:15:41

+0

你不需要設計師。你簡單的使用DataTable.ColumnChanging事件。在那裏你可以用SetColumnError設置你的驗證規則。請參閱我的編輯 – blindmeis 2014-10-01 13:30:27

+0

謝謝,只是在嘗試修改正確類型的數據時調用該事件時,如果用戶輸入的數據類型錯誤,則不會調用它。與之前一樣,該框突出顯示爲紅色,格式異常由wpf處理,但事件未被調用。 – 2014-10-01 13:50:58