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).

Print | posted on lunedì 22 febbraio 2010 02:11

Comments on this post

# re: Visualizzare al volo un array in una griglia

Requesting Gravatar...
Ciao Luca, non ho ben capito cosa intendi
Left by Leonardo on feb 22, 2010 11:28

Your comment:

 (will show your gravatar)
 
Please add 1 and 2 and type the answer here: