nayru2000 escribió:Las columnas (creo) tienen una propiedad que se llama Visible para que se muestren o no. Las filas si tienen una fuente de datos no estoy tan seguro de si se pueden quitar.
Yo acabé usando el DataGridView del Framework 2.0, he estado probando con la DataGrid de ese Toolkit y me parecía menos flexible y con menos opciones que el DataGridView.
Mucha suerte
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding TuLista}">
<DataGrid.Columns>
<DataGridTextColumn Header="Columna 1" Binding="{Binding Columna1}" />
<DataGridTextColumn Header="Columna 3" Binding="{Binding Columna3}" />
<DataGridTextColumn Header="Columna 10" Binding="{Binding Columna10}" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
Fox escribió:A verr, jamás pensé en ver un post sobre wpf en eol, pero bue.
La idea está para empezar en que desactives el AutoGenerateColumns, asi tendrás la posibilidad de poner las columnas que quieras.
No sé que devolverá tu método, pero lo suyo es que uses ObservableCollection que te permitirá borrar elementos usando supr, añadir nuevos, editar...
Por otro lado, para crear las columnas que necesites sería en plan:<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding TuLista}">
<DataGrid.Columns>
<DataGridTextColumn Header="Columna 1" Binding="{Binding Columna1}" />
<DataGridTextColumn Header="Columna 3" Binding="{Binding Columna3}" />
<DataGridTextColumn Header="Columna 10" Binding="{Binding Columna10}" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
Esto es un ejemplo. Es importante que te familiarices con XAML y evitar hacer las cosas con código siempre que puedas.
El tema es simple, haces un binding a tu lista de elementos, luego cada columna tendrá como contexto un elemento de esa lista, ese elemento tendrá propiedades (que son las columnas) pues simplemente "bindeas" las columnas que necesites.
Si tienes más dudas, preguntame, pero tampoco intentes correr mucho por terreno desconocido.
ObservableCollection<Reserva> reservas = new ObservableCollection<Reserva>(ObtenerReservasUsuario());
Fox escribió:Vamos a ver, esos métodos estaria mejor si en vez de List devolvieran la interfaz, IList, pero bueno, el caso es que trabajes con ObservableCollection
Puedes hacer algo en plan:ObservableCollection<Reserva> reservas = new ObservableCollection<Reserva>(ObtenerReservasUsuario());
Lo _dificil_ está en cambiar el datagrid en tiempo de ejecución.
No es que sea dificil como tal, simplemente tendrás que cambiar las columnas dinámicamente cuando hagas click en un checkbox.
Ya todo depende de lo pegado que estes o no con WPF jeje.
Pero el caso es fácil, necesitas un ObservableCollection, una propiedad para dicho ObservableCollection (que usarás como ItemsSource de la tabla) y luego cada columna la "bindeas" a las propiedades de cada objeto que esté en el ObservableCollection.
Podrías crearte algun método para que cree las columnas en tiempo de ejecución y se vayan cambiando, es mejor que tener 3 datagrids.
Realmente sería interesante alguna forma de que el datagrid supiera que columnas quieres y las genere automaticamente, te solucionaría todo el problema, aunque ahora mismo no caigo en como se podría hacer.
Fox escribió:El problema es que es dificil ayudarte si no sabes bien lo que estás tocando.
La idea está en que el evento que dices que tienes con los RadioButtons, lo uses para crear las columnas. Un metodo al que le pasas la info de las columnas, borra las que hay y genera nuevas.
El problema es que si no sabes que es un Binding (lo más básico en WPF), creo que te has equivocado. Podrías haber usado algo más simple pero has tirado por WPF que es bastante más complejo al principio y no me extraña que te des de bruces contra la pared.
A tu PD, hay un principio de programación que decía algo así: Nunca trabajes con una implementación concreta, trabaja para la interfaz.
En tu caso, no necesitas trabajar con List, puedes trabajar con la interfaz así ese código lo podrá usar otras colecciones que implementen IList y no sean LIST.
Sobre tu tema, me temo que vas a tener que dejar de construir el tejado y empaparte de wpf un poco.