2013-02-24 2 views
0

테이블 목록을 가진 트리 뷰를 표시해야하고 사용자가 테이블을 선택하면 열 목록이있는 표가 표시되어야합니다. & 행에 DataGridCheckboxColumns가 있어야하며 사용자가 다음을 수행 할 수 있습니다. 체크 박스 열을 편집하십시오.동적 열과 행이있는 DataGrid

현재이 작업을 수행하는 데 기술적 인 문제가 있습니다.

데이터 테이블이 업데이트되었지만 그리드에 할당해도 행이 표시되지 않지만 트리보기 선택이 변경되는 경우 행이 표시되지 않고 UI에 반영되지 않습니다. 이 일을 정말로 도와주세요. 응급 상황입니다.

미리 감사드립니다. 아래의 코드 스 니펫을 찾으십시오.

//DataGrid Add Columns and Rows 
private void DataGridInitialize(string tableName) 
{ 
    DataSet ds = selectionViewBAL.GetColumnNames(tableName); 
    DataSet dataset = new DataSet(); 
    DataTable dt = new DataTable(); 
    dt.Columns.Add("Functions"); 
    dt.Columns.Add("AllColumns"); 

    foreach (var row in ds.Tables[0].Rows) 
    { 
     string rowname = ((System.Data.DataRow)(row)).ItemArray[0].ToString(); 
     dt.Columns.Add(rowname); 
    } 

    int i = 0; 
    foreach (DataColumn col in dt.Columns) 
    { 
     if (i == 0) 
     { 
      dataGrid1.Columns.Add(
       new DataGridTextColumn 
       { 
        Header = "Functions", 
        Binding = new Binding(string.Format("[{0}]", "Functions")) 
       }); 
     } 
     else 
     { 
      dataGrid1.Columns.Add(
       new DataGridCheckBoxColumn 
       { 
        Header = col.ColumnName, 
        Binding = new Binding(string.Format("[{0}]", col.ColumnName)) 
       }); 
     } 
     i++; 
    } 

    DataSet fetchFunctionNames = new DataSet(); 
    fetchFunctionNames = selectionViewBAL.GetListOfFunctions(); //FetchFunctions(); 

    DataRow dr = dt.NewRow(); 

    var itemsArray = new object[dataGrid1.Columns.Count]; 
    for (int j = 0; j < fetchFunctionNames.Tables[0].Rows.Count; j++) 
    { 
     itemsArray[0] = fetchFunctionNames.Tables[0].Rows[j].ItemArray[1]; 
     for (i = 1; i < itemsArray.Length; i++) 
     { 
      itemsArray[i] = true; 
     } 

     dr.ItemArray = itemsArray; 

     dt.Rows.Add(dr); 
     dr = dt.NewRow(); 
    } 

    dataGrid1.DataContext = dt; 
} 

enter image description here

나는 DT의 모든 것을 볼 수 있어요,하지만 난 데이터 그리드 동일한를 할당 할 수 없습니다 그리고 난 그래도 편집을 기울인다.

<DataGrid Grid.Row="0" Grid.ColumnSpan="4" Grid.Column="1" 
      HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" 
      HorizontalAlignment="Left" VerticalAlignment="Top" Margin="7,9,0,0" 
      Name="dataGrid1" ItemsSource="{Binding}"> 
+0

제가 바인딩에 주로있는 거짓말을 알고, 제발 도와주세요, 출력 첨부 된 이미지처럼 보이지만 제대로 바인딩에 도와주세요. – user1095239

답변

0

DataTable.DefaultView Property에 바인딩.

dataGrid1.ItemsSource = dt.DefaultView; 

WPF Snippet Tutorial - Binding a DataTable to a DataGrid도 참조하십시오.

+0

답장을 보내 주셔서 감사합니다.하지만 제 경우에는 작동하지 않았습니다. datagrid에 datagrid를 만들고 datagrid에 datagrid를 지정하면 두 번째 열과 값이 첫 번째 집합에 표시되고 checkboxcolumn 및 두 번째 집합은 bool 값 (True/False)을 텍스트로 표시합니다. 트리에서 다른 테이블 이름을 선택하면 Datatable에서 업데이트되고 디버그 모드에서 업데이트 된 열 이름을 볼 수 있지만 UI에서는 첫 번째 설정 값을 표시합니다. 추가 진행 방법 – user1095239