2010-09-02 13 views
5

Tengo una tabla de datos con muchas columnas y una cuadrícula de datos en la que necesito mostrar solo algunas de esas columnas. Necesito un coeficiente de cómo hacerlo. Encontré un montón de ejemplos diciéndome que convierta AutoGenerateColumns en verdadero y establezca la tabla como DataContext para mostrar todas las columnas en mi DataTable. Y creo que podría poner una página de código para ocultar todas las columnas que no necesito, reorganizar las sobrantes en el orden y tamaño adecuados, pero seguramente debe haber una manera más elegante.En WPF, ¿cómo puedo vincular una columna de cuadrícula de datos a una columna específica de una tabla de datos?

En el diseñador, he compilado la colección de columnas que quiero mostrar, obtuve el datable, ¿cómo puedo unir una columna de cuadrícula de datos existente a una columna datatable específica en mi código?

Respuesta

13

Enlace su DataTable al DataGrid, establezca AutoGenerateColumns en False, y luego agregue las columnas que desee a DataGrid.Columns. Aquí hay un ejemplo usando una DataTable llamada Collection, con dos columnas: ID y 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

Estoy empezando a ver por qué XAML es tan genial. –

4

XAML unión no funcionaría para mí porque mi DataTable se genera en tiempo de ejecución por lo que no hay nada que se unen a en tiempo de diseño. De todos modos, me encontré con cómo hacer lo que quería aquí.

Mis problemas se debieron a que por algún motivo no se produjo ningún error cuando establecí ItemSource en la tabla, en lugar de DefaultView de la tabla, aunque, como he leído más adelante, la tabla no implementa la interfaz requerida. Pero sin ningún error para decirme la diferencia, no tenía nada que ver para descubrir por qué mi cuadrícula se mostraría como vacía.

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