DataGrid с динамическими столбцами и строками

У меня есть требование, когда я должен показать древовидное представление со списком таблиц, и если пользователь выбирает какую-либо таблицу, тогда она должна отображать сетку со списком столбцов, а строки должны иметь столбцы DataGridCheckboxColumns, и пользователь может редактировать столбцы флажков.

В настоящее время я сталкиваюсь с техническими проблемами при выполнении этого.

Я могу создавать столбцы, но строки не отображаются, и более того, при изменении выбора древовидного представления, хотя у меня обновлена ​​​​таблица данных, но если я назначаю сетку, это не отражается в пользовательском интерфейсе. Пожалуйста, помогите мне в этом, это действительно чрезвычайное требование.

Заранее спасибо. Пожалуйста, найдите фрагмент кода ниже.

введите здесь описание изображения

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

person user1095239    schedule 24.02.2013    source источник
comment
Я знаю, что проблема в основном связана с привязкой, пожалуйста, помогите мне в этом, вывод выглядит как прикрепленное изображение, но помогите мне правильно его привязать.   -  person user1095239    schedule 24.02.2013


Ответы (1)


Привяжите к свойству DataTable.DefaultView.

dataGrid1.ItemsSource = dt.DefaultView;

Пожалуйста, ознакомьтесь с этим Учебным пособием по фрагменту кода WPF. DataTable в DataGrid.

person LPL    schedule 24.02.2013
comment
Спасибо за ваш ответ, но в моем случае это не сработало. Я создал сетку данных с набором столбцов, и назначение datatable для сетки данных отображает двойной набор столбцов, а значения в 1-м наборе показывают столбец флажка, а второй набор показывает логические значения (True/False) в виде текста. Если я выбираю другое имя таблицы в дереве, оно обновляется в Datatable, и я вижу обновленные имена столбцов в режиме отладки, но в пользовательском интерфейсе отображаются первые заданные значения. Как мне поступить дальше - person user1095239; 25.02.2013