DataGrid具有动态列和行

时间:2013-02-24 18:32:58

标签: c# wpf mvvm wpfdatagrid wpf-4.0

我需要在哪里显示带有表列表的树视图,如果用户选择任何表,那么它应该显示一个带有列列表的网格&行应该有一个DataGridCheckboxColumns,用户可以编辑checkboxcolumns。

目前我在执行此操作时面临技术挑战。

虽然我已经更新了数据表,但我可以创建列,但是行不会显示,而是更改了树视图选择,但是如果我分配给网格,它不会反映在UI中。请帮我解决这个问题。

先谢谢。请在下面找到代码段。

enter image description here

//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;
}

我能够看到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}">

1 个答案:

答案 0 :(得分:0)

绑定到DataTable.DefaultView Property

dataGrid1.ItemsSource = dt.DefaultView;

请参阅此WPF Snippet Tutorial - Binding a DataTable to a DataGrid