В WPF, как я могу привязать столбец таблицы данных к определенному столбцу таблицы данных? - PullRequest
8 голосов
/ 02 сентября 2010

У меня есть Datatable со многими столбцами и сетка данных, в которой мне нужно отобразить только несколько из этих столбцов.Мне нужен пример кода, как это сделать.Я нашел целую кучу примеров, говорящих мне, чтобы установить AutoGenerateColumns в true и установить таблицу как DataContext для отображения всех столбцов в моей DataTable.И я думаю, что тогда я мог бы вставить страницу кода, чтобы скрыть все ненужные столбцы, переставить оставшиеся столбцы в надлежащий порядок и размер, но наверняка должен быть более элегантный способ.

В конструкторе я собрал коллекцию столбцов, которую я хочу отобразить, я получил данные, как связать существующий столбец таблицы данных с конкретным столбцом данных в моем коде?

Ответы [ 2 ]

18 голосов
/ 02 сентября 2010

Свяжите свой DataTable с DataGrid, установите AutoGenerateColumns в значение False, а затем добавьте все столбцы, которые вы хотите, в DataGrid.Columns. Вот пример использования DataTable под названием Collection с двумя столбцами: ID и Value.

<DataGrid
    ItemsSource="{Binding Path=Collection}"
    AutoGenerateColumns=False
    >

    <DataGrid.Columns>
        <DataGridTextColumn Header="Id" Binding="{Binding Path=Id}" />
        <DataGridTextColumn Header="Value" Binding="{Binding Path=Value}" />
    </DataGrid.Columns>
</DataGrid>
4 голосов
/ 02 сентября 2010

XAML-связывание не будет работать для меня, потому что мой DataTable генерируется во время выполнения, так что нечего связывать во время разработки.Во всяком случае, я наткнулся на то, как сделать то, что я хотел здесь.

Мои проблемы были из-за того, что по какой-то причине не возникло ошибки, когда я установил ItemSource для самой таблицы, а не для DefaultView таблицыхотя, как я позже прочитал, в таблице не реализован необходимый интерфейс.Но без каких-либо ошибок, которые могли бы сказать мне разницу, мне было нечего искать, почему моя сетка будет отображаться как пустая.

DataGridName.DataContext = DataSetName.DataTableName;
DataGridName.ItemsSource = DataSetName.DataTableName.DefaultView;

((DataGridTextColumn)DataGridName.Columns[1]).Binding = new Binding("DataTableColumnName1");
((DataGridTextColumn)DataGridName.Columns[0]).Binding = new Binding("DataTableColumnName2");
((DataGridTextColumn)DataGridName.Columns[2]).Binding = new Binding("DataTableColumnName3");
...