2016-09-06 1 views
-1

SqlDataAdapter으로 채워진 DataTable에 바인딩 된 DataGrid을 만들었습니다. 따라서 DataGrid에서 사용자가 편집 할 때 내 DataGrid 유형을 검사합니다. 이는 올 Y 른 유형이 데이터베이스에 커 L 트되었는지 확인하기 때.입니다. 그러나 셀을 null이라고 생각하는 빈 셀로 편집하려고하면 유효성 검사에서 행을 변경할 수 없으므로 데이터베이스 변경 내용을 커밋 할 수 없습니다. 그러나 새 행을 추가 할 때 비어있는 열이 데이터베이스에서 Nullable 인 한 문제없이 행을 추가 할 수 있습니다.WPF에서 빈 셀을 허용 할 수있는 DataGrid 유효성 검사를 만들려면 어떻게해야합니까?

DataGrid의 열을 정의 할 수 없습니다. 다른 테이블을 표시하기 때문에 열을 가져 오기 전에 테이블의 구조를 알 수 없기 때문에 열을 정의 할 수 없습니다.

데이터 그리드 : 어떤 방법이 문제를 해결하기 위해이 경우의 DataTable 및 데이터 그리드

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

[Minimal, Complete, Verifiable example] (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 유형 일 수 있으므로 다른 해결 방법을 시도하고 완료되면 내 게시물을 편집하려고합니다.

EDIT :

가 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이다.

관련 문제