Impostare correttamente il MappingName del DataGridTableStyle di un DataGrid

Nella programmazione, soprattutto quando si tratta di usare framework evoluti come può essere il .NET, ci sono stupidate che però fanno perdere anche ore di scervellamenti vari.

E’ il caso del datamapping, più specificatamente il datamapping di una GridView. Infatti questo potente controllo permette di crearsi più stili da usare al momento opportuno per cambiare a volo la visualizzazione dei dati dell’oggetto bindato, senza scrivere tonnellate di codice. Ogni stile però va collegato ad un oggetto al quale verrà applicato tramite la proprieta’ DataGridTableStyle.MappingName. Nel caso in cui alla DaraGrid sia bindata una DataTable o un DataSet pochi problemi, basta specificare il nome della Table da visualizzare. Ma se viene bindato ad una Collection, List o un proprio oggetto che implementa l’intefaccia IList, che cosa bisogna mettere?

La risposta arriva da Daniel Herling, l’uomo Microsoft del DataGrid. In pratica, occorre conoscere il "nome" dell’oggetto da mappare, e questo nome lo si ricava in due modi:

  • If you bind to an ITypedList (say, System.Data.DataTable) then the mapping name should be ITypedList::GetListName(). For a System.Data.DataTable this would be the name of the data table.
  • If you don’t bind to an IList that is not ITypedList then the mapping name should be list.GetType().Name where list is the list the data grid is bound to. 

Nel mio caso, per bindare una List tipizzata, ho usato

ts.MappingName = "List`1"

La soluzione completa qui.

Leave a Reply