2011-03-03 16 views
5

Im actualmente tratando de obligar a la DataGrid.ItemsSource a un RowCollection personalizada, que implementa IList y INotifyCollectionChanged:colección personalizada se estrella en la cuadrícula de datos Editar

Public Class RowCollection(of T)
Implements IList(Of T)
Implements INotifyCollectionChanged
Private _List As New List(Of T)
...

(Lo siento por el código VB, voy a estar traduciendo todo mi código para C# pronto.)

Observe que la clase no proviene de de ninguna colección existente de CLR. Creé mi propia clase porque necesito anular GetItemAt, para implementar la búsqueda de registros. La colección internamente agrega y quita objetos de su propia lista privada _List.

Ahora, puedo ver los elementos en un DataGrid, pero tan pronto como hago doble clic en una celda para editar, recibo una InvalidOperationException: 'EditItems' no está disponible..

Mi pregunta es, ¿qué otras interfaces debo implementar para hacer que mi colección sea totalmente compatible con DataGrid?

+0

1 Recuerdo que tenía el mismo problema, pero no han tratado de cavar en ella porque no tenía el tiempo. Por lo que recuerdo, terminé usando ObservableCollection como ItemsSource sincronizándolos con mis propias colecciones. Tengo curiosidad si alguien tiene una solución. – HCL

+0

Creo que lo que estás tratando de hacer se puede hacer de una manera más simple. Utilice una colección existente y luego coloque DataGridView en modo virtual e implemente el controlador CellValueNeeded (object, ... CellEventArgs). Enlace: http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.virtualmode.aspx El propósito del modo virtual es admitir el tipo de escenario de paginación que tiene en mente. –

+1

Lo siento. Olvidé mencionar que estoy usando WPF DataGrid en WPF Toolkit para .Net 3.5. El enlace que mencionaste es sobre WinForms. –

Respuesta

2

Here se puede leer lo siguiente:

Edición

Por defecto, puede editar artículos directamente en la cuadrícula de datos. Para garantizar que las ediciones se pueden confirmar y se cancelaron correctamente, los objetos en el DataGrid deben implementar la interfaz 0dIEditableObject. Como alternativa, puede establecer la propiedad IsReadOnly en true para deshabilitar la edición en DataGrid.

La interfaz es IEditableObject here Véase también IEditableCollectionView here

Cuestiones relacionadas