Per migliorare a livello visivo le informazioni contenute nel DataGrid può essere utile l'aggiunta di una riga che riepiloghi, ad esempio, la categoria.
Ovviamente perchè questo script possa funzionare al meglio, è necessario che la query che estrae i dati dal database ordini già i risultati in base alla categoria.
Successivamente sarà necessario effettuare un ciclo sui record restituiti, in modo da aggiungere righe fittizie, che in realtà ci serviranno solo per modificare il DataGrid in fase di databinding:
// variabile per contenere la categoria corrente string currentCategory = String.Empty; // prendo i dati dal DataSet popolato DataTable dt = ds.Tables[0]; for (int i = 0; i<dt.Rows.Count; i++) { // controllo se la categoria è la stessa della riga precedente if (ds.Tables[0].Rows<i>["category"].ToString() != currentCategory) { // aggiungo una nuova riga al DataTable DataRow dr = dt.NewRow(); dr[0] = dt.Rows<i>["category"].ToString(); dt.Rows.InsertAt(dr, i); } // salvo la categoria corrente currentCategory = ds.Tables[0].Rows<i>["category"].ToString(); } currentCategory = String.Empty; // faccio il binding dei dati sul datagrid dg.DataSource = dt; dg.DataBind();
Per convenzione abbiamo salvato nella prima colonna della nuova riga la categoria, in modo che poi attraverso il ciclo che segue, mutuato dallo script #697, venga preparata la riga con la descrizione e rimossa la prima colonna da tutte le altre:
// routine per intercettare il databind e modifica il DataGrid private void dg_ItemDataBound(object sender, DataGridItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { // controllo se la categoria è sempre la stessa // la cerco nella prima colonna, le altre sono vuote if (e.Item.Cells[0].Text != currentCategory) { // cambio il colspan, così la cella è grande tutta la riga e.Item.Cells[0].ColumnSpan = e.Item.Cells.Count; // e tolgo via le altre celle for (int i = 1; i < e.Item.Cells.Count; i++) e.Item.Cells.RemoveAt(i); } else { // rimuovo solo la prima riga, che contiene la categoria e.Item.Cells.RemoveAt(0); } // salvo il titolo corrente prima di continuare il ciclo currentCategory = e.Item.Cells[0].Text; } }
Approfondimenti
#697 - Aggiungere al DataGrid un effetto al passaggio del mouse
https://www.aspitalia.com/script/697/AggiungereDataGridEffettoPassaggioMouse.aspx
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.