2010-09-02 14 views
5

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

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

ответ

13

Привяжите 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> 
+1

Я начинаю понимать, почему XAML так круто. –

4

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");