Visualizzare al volo un array in una griglia

I controlli griglia di Windows Forms (DataGridView) e WPF (DataGrid) non permettono di visualizzare “al volo” correttamente insiemi di elementi di tipi come int, float, string, etc.. perché non espongono il loro valore come una proprietà.

Il seguente codice per esempio

int[] myArray = new int[] { 1, 2, 3 };

dataGrid1.ItemsSource = myArray;

mostrerà solamente una griglia con tre righe vuote.

Una lista di elementi di tipo string invece visualizzerà nella griglia solamente le lunghezze delle stringhe ma non il loro contenuto proprio perché la prima proprietà della classe string è Lenght. Molto spesso però la necessità è di visualizzare l’effettivo testo della stringa.

Per ovviare rapidamente al problema possiamo creare un Extension Method che aggiungerà a tutti gli insiemi enumerabili (di tipo IEnumerable<T>) un metodo chiamato ToPropertyData che ritornerà i valori degli elementi dell’insieme esposti come proprietà di un oggetto contenitore chiamato DataContainer.

Per visualizzare correttamente un array di int sarà necessario solamente scrivere il codice

int[] myArray = new int[] { 1, 2, 3 };

dataGrid1.ItemsSource = myArray.ToPropertyData();

ed il gioco è fatto.

DataGridArray

il codice dell’Extension Method:

public static class ExtensionMethodHelper

{

    public class DataContainer<T>

    {

        T data;

        public T Data { get { return data; } }

        public DataContainer(T value)

        {

            this.data = value;

        }

    }

    /// <summary>

    /// Convert array of data into array of DataContainer class that expose data as property

    /// </summary>

    /// <remarks>Useful with DataGrid(View)</remarks>

    public static List<DataContainer<TSource>> ToPropertyData<TSource>(this IEnumerable<TSource> source)

    {

        List<DataContainer<TSource>> result = new List<DataContainer<TSource>>();

        foreach (var item in source)

        {

            result.Add(new DataContainer<TSource>(item));

        }

        return result;

    }

}

questo Extension Method è valido solamente per visualizzare i valori in una griglia in modo rapido (ad esempio per controllare determinati valori in fase di debug) ma non supporta la sincronizzazione con l’insieme di origine (nell’esempio l’insieme myArray).

posted @ lunedì 22 febbraio 2010 0.11

Print

Comments on this entry:

# re: Visualizzare al volo un array in una griglia

Left by Luca Minudel at 22/02/2010 1.05
Gravatar
Ho trovato nel commento che hai scritto (summary e remark) un suggerimento per migliorare il codice

# re: Visualizzare al volo un array in una griglia

Left by Leonardo at 22/02/2010 10.28
Gravatar
Ciao Luca, non ho ben capito cosa intendi

# re: Visualizzare al volo un array in una griglia

Left by Luca Minudel at 22/02/2010 17.53
Gravatar
in effetti, non é che mi son spiegato bene :)

Nei commenti precisi che il metodo é "Useful with DataGrid(View)".

Quindi aggiungendo l'extension method alla DataGrid, chiamandolo ad esempio SetItemsSource<T>(Array<T> arraySource)

il codice parla da se e non servono piú i commenti.

Your comment:



 (will not be displayed)


 
 
 
Please add 4 and 1 and type the answer here:
 

Live Comment Preview:

 
«febbraio»
domlunmarmergiovensab
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910