2016-09-06 46 views
-1

我製作了一個DataGrid,它綁定到由SqlDataAdapter填充的DataTable,因此我的DataGrid類型會檢查用戶在DataGrid中進行編輯時的情況。這很好,因爲它確保將正確的類型提交給數據庫。但是,當我嘗試將單元格編輯爲空單元格時(我認爲它是null),驗證不會讓我更改該行,因此我無法將更改提交到數據庫。但是,當我添加一個新行時,只要空數據列在數據庫中可以爲空,我就可以毫無問題地添加該行。如何使DataGrid驗證能夠接受WPF中的空單元格?

我無法定義DataGrid中的列,因爲它應該顯示不同的表格,並且在獲取表格之前無法知道表格的結構。

的DataGrid:

填充數據表和DataGrid

internal DataTable FillDataGridFromSelectedTable(User user, MainWindow mainWindow) 
    { 
     dt = new DataTable(); 

     using (SqlConnection con = new SqlConnection(ConnectionString)) 
      { 
       con.Open(); 

       using (SqlCommand cmd = new SqlCommand("SELECT * FROM " + Name, con)) 
       { 
        SqlDataAdapter sda = new SqlDataAdapter(cmd); 
        sda.Fill(dt); 
        mainWindow.dataGrid_Table.ItemsSource = dt.DefaultView; 
       } 
      } 
    } 

如果有什麼辦法可以解決這個

<DataGrid x:Name="dataGrid_Table" HeadersVisibility="Column" CanUserAddRows="true" RowEditEnding="dataGrid_Table_RowEditEnding"/> 

方法?

非常感謝你。

+0

除非您提供[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve) – ASh

+0

感謝您的回答,否則無法回答您的問題。我將包含DataGrid的XAML和用於填充DataTable的代碼。但是,我不明白這對任何人都沒有任何幫助:-) – nickosv

回答

0

以供將來參考,如果有人需要的答案,我得到它的工作使用

private void dataGrid_Table_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
     { 
      // Make all columns nullable 
      ((DataGridBoundColumn)e.Column).Binding.TargetNullValue = "NULL"; 
     } 

現在我有,當我想添加一個新行,當我進入編輯顯示的默認值的問題模式,我希望這些值是空字符串。由於某些列可能爲int類型,因此我會嘗試制定另一個解決方法,並在完成後編輯我的帖子。

編輯:

通過添加InitializingNewItem事件固定它。即使它不是我想要的樣子,但這是我能找到的唯一有效的方法。

private void dataGrid_Table_InitializingNewItem(object sender, InitializingNewItemEventArgs e) 
    { 
     DataRowView drv = (DataRowView)e.NewItem; 

     for (int i = 0; i < drv.Row.ItemArray.Count(); i++) 
     { 
      DataColumn col = drv.Row.Table.Columns[i]; 

      if (col.DataType.ToString() == "System.String") 
      { 
       drv.Row[i] = ""; 
      } 
      else if (col.DataType.ToString() == "System.Int32") 
      { 
       drv.Row[i] = 0; 
      } 
     } 
    } 

String細胞是空的,int細胞是0,被工程確定的設計。

相關問題