2010-09-02 15 views
5

Mam Datatable z wieloma kolumnami i datagrid, w którym muszę wyświetlić tylko kilka z tych kolumn. Potrzebuję kodów, jak to zrobić. Znalazłem całą masę przykładów, które kazały mi zmienić wartość AutoGenerateColumns na true i ustawić tabelę jako DataContext, aby wyświetlić wszystkie kolumny w mojej DataTable. I myślę, że mógłbym umieścić stronę kodu, aby ukryć wszystkie kolumny, których nie potrzebuję, zmienić kolejność pozostałych do odpowiedniej kolejności i wielkości, ale z pewnością musi być bardziej elegancki sposób.W WPF, jak mogę powiązać kolumnę datagrid z określoną kolumną datatable?

W projektancie zbudowałem kolekcję kolumn, które chcę wyświetlić, otrzymałem datowacz, w jaki sposób wiążę istniejącą kolumnę datagridu z określoną datowalną kolumną w moim kodzie?

Odpowiedz

13

Powiąż tabelę DataGable z formantem DataGrid, ustaw wartość AutoGenerateColumns na False, a następnie dodaj kolumny, które chcesz, do obiektu DataGrid.Columns. Oto przykład użycia DataTable o nazwie Collection, z dwiema kolumnami: ID i 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

Zaczynam rozumieć, dlaczego XAML jest taki fajny. –

4

XAML wiązania nie działa dla mnie, ponieważ mój DataTable są generowane w czasie wykonywania więc nie ma nic do wiązania się w czasie projektowania. W każdym razie, natknąłem się na to, jak robić to, co chciałem tutaj.

Moje problemy wynikały z tego, że z jakiegoś powodu nie wystąpił błąd podczas ustawiania ItemSource dla samej tabeli, zamiast tabeli DefaultView, mimo że, jak później przeczytałem, tabela nie implementuje wymaganego interfejsu. Ale bez żadnych błędów, które mogłyby mi powiedzieć, że mam różnicę, nie miałem pojęcia, dlaczego moja siatka będzie wyświetlana jako pusta.

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