156 messaggi dal 12 ottobre 2007
ciao a tutti...

volevo chiedere aiuto riguardo un piccoo problema:

ho un gridview che attinge i dati da un db access e mi servirebbe sommare tutti i record e visualizzare il totale nel gridview stesso (magari nel footer), poichè dovrò poi esportarlo in excel (quindi mi serve una griglia omogenea).

Come posso sommare i record direttamente sul gridview?

ciao
grazie
652 messaggi dal 21 gennaio 2007
Contributi
Ciao !
Devi intercettare l'evento RowDataBound della tua gridview ed effettuare il conteggio se il tipo di riga che viene eseguita è di tipo DataRow, altrimenti stampare il risultato del conteggio se la riga è di tipo Footer.
Una cosa di questo genere:

protected void gridview_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
ColumnTotal += Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "Amount"));
}
else if (e.Row.RowType == DataControlRowType.Footer)
{
e.Row.Cells[o1].Text = "Total Rs:";
e.Row.Cells[1].Text = ColumnTotal.ToString();
}
}


Trovi un buon esempio qua:
http://msdn.microsoft.com/en-us/library/bb310553.aspx
puoi gestire l'evento RowDataBound, l'evento viene generato ogni volta che la "riga" viene associata alla rispettiva "riga" delle fonte dati.

recuperi il dato da sommare e tramite la proprietà GridView.FooterRow fai più o meno quello che vuoi del footer :D

ciao marco


p.s. sono arrivato un minuto dopo
Modificato da nostromo il 01 settembre 2008 10.53 -

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
156 messaggi dal 12 ottobre 2007
intanto grazie ad entrambi per le risp

sono un pò confuso: nel tutorial capisco più o meno il procedimento, ma non mi sono chiari un paio di punti...

qui dice:
// Reference the ProductsRow via the e.Row.DataItem property
Northwind.ProductsRow product =
(Northwind.ProductsRow)
((System.Data.DataRowView)e.Row.DataItem).Row;

solo che usando Access non so come "sostituire" il tutto...
652 messaggi dal 21 gennaio 2007
Contributi
L'esempio utilizza i DataSet di ASP.NET 2.0
Nel tuo caso, quella parte li la devi completamente sostituire e devi andare a prelevare il valore della colonna che vuoi sommare, tramite la proprietà e.Row.Cells; tale valore lo devi sommare ad una varabile globale che ti terrà conto della somma.
Una cosa di questo genere:


private int totale;

protected void gridview_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
if (e.Row.RowType == DataControlRowType.DataRow) 
{ 
int valoreDaSommare = Int32.Parse(e.Row.Cells(0).Text);
totale += valoreDaSommare;
}
else if (e.Row.RowType == DataControlRowType.Footer) 
{ 
e.Row.Cells[0].Text = "Totale:"; 
e.Row.Cells[1].Text = String.Format("{0}", totale); 
} 
}

chiaramente gli indici che ti ho messo nell'esempio, li devi cambiare con gli indici delle colonne che vuoi sommare, e della colonna in cui vuoi inserire il totale (nel footer)
156 messaggi dal 12 ottobre 2007
mi dà un errore strano:

Errore7
'System.Web.UI.WebControls.TableRow.Cells' è 'proprietà' ma è utilizzato come 'metodo'.

??
652 messaggi dal 21 gennaio 2007
Contributi
Cells è una collezione di oggetti.
Quindi per recuperare una singola cella puoi fare:

in c#
TableCell cella = e.Row.Cells[0];


in vb.net
Dim cell As TableCell = e.Row.Cells(0);
156 messaggi dal 12 ottobre 2007
perdonami l'ignoranza ma continua a darmi l'errore di prima...e mi dice "il nome 'e' (di e.Row) non esiste nel contesto corrente)"....

sono una pippa col .net

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.