Ajouter un champ total à DataGrid dans ASP.NET
Auteur:Eve Cole
Date de mise à jour:2009-06-30 15:40:15
L'une des questions les plus fréquemment posées sur le forum est : "Comment afficher les totaux des colonnes dans un DataGrid ?". J'ai personnellement fourni à plusieurs reprises un exemple de code pour cette question, je voulais donc fournir un tel guide dans le titre DotNetJunkies. Dans ce guide, vous apprendrez à compter par programme les valeurs d'une colonne dans le DataGrid et à afficher la valeur totale dans le pied de page du DataGrid. Les exemples téléchargeables dans ce guide incluent du code C# et Visual Basic.NET.
Le résultat final de ce guide ressemblera à ceci :
Comme on peut le voir sur la photo ci-dessus :
Le DataGrid dans l’image d’écran utilisée ci-dessus est un DataGrid très typique. Il existe de nombreuses propriétés qui contrôlent l'apparence du DataGrid, qui utilise deux BoundColumns pour manipuler les données, mais ce n'est pas le plus important. La chose vraiment importante pour bien faire cela est d'utiliser l'événement DataGrid.OnItemDataBound. Cet événement sera déclenché chaque fois qu'un enregistrement est lié au DataGrid. Vous pouvez créer un gestionnaire d'événements pour cet événement afin de manipuler l'enregistrement de données. Dans ce cas, vous obtiendrez la valeur totale de la colonne Prix au moment de l'exécution.
Le pied de page fait référence à la dernière ligne de la plage de données. Lorsque cette ligne est qualifiée, vous pouvez obtenir les statistiques d'exécution de la colonne Prix lors du traitement des événements.
Mise en œuvre :
Trouvons d’abord un moyen de manipuler la sortie des Web Forms. Dans ce didacticiel, vous utiliserez un formulaire Web (calcTotals.aspx) et un fichier de code de classe (calcTotals.aspx.cs). L'objectif de ce guide est que le code de classe soit compilé à l'aide d'un compilateur Just-In-Time. Voici le code de calcTotals.aspx :
<%@ Page Inherits="myApp.calcTotals" Src="20010731T0101.aspx.cs" %>
|
AutoGenerateColumns="False" CellPadding="4" CellSpacing="0" BorderStyle="Solide" BorderWidth="1" Gridlines="Aucun" BorderColor="Noir" ItemStyle-Font-Name="Verdana" ItemStyle-Font-Size="9pt" HeaderStyle-Font-Name="Verdana" HeaderStyle-Font-Size="10pt" HeaderStyle-Font-Bold="Vrai" HeaderStyle-ForeColor="Blanc" HeaderStyle-BackColor="Bleu" FooterStyle-Font-Name="Verdana" FooterStyle-Font-Size="10pt" FooterStyle-Font-Bold="Vrai" FooterStyle-ForeColor="Blanc" FooterStyle-BackColor="Bleu" OnItemDataBound="MyDataGrid_ItemDataBound" ShowFooter="True">
|
ItemStyle-HorizontalAlign="Droite" HeaderStyle-HorizontalAlign="Centre" />
|
Dans Web Forms, vous utilisez @Page pour déclarer directement le code de classe dont la page hérite. L'attribut SRC indique que le code de la classe sera compilé à l'aide du compilateur JIT. La plupart des déclarations de style de code dans les formulaires Web sont utilisées pour améliorer l'apparence du DataGrid.
L'une des dernières propriétés spécifiées est la propriété OnItemDataBound. Cet événement sera déclenché lorsque l'événement OnItemDataBound se produira.
Le DataGrid (MyGrid) dans le formulaire Web contient deux BoundColumns, l'une est le titre et l'autre le prix. Les colonnes titre et prix de la table Titres de la base de données Pubs (SQL Server) seront affichées ici.
Ignorer les définitions de code
Le code de classe sera utilisé partout. Dans le code de la classe, vous pouvez gérer deux événements : l'événement Page_Load et l'événement MyGrid_OnItemDataBound. Il existe également une méthode privée CalcTotal, qui peut être utilisée pour effectuer simplement des opérations mathématiques sur les statistiques d'exécution.
Le début du bloc structurel de base du code de classe :
utiliser le système ; en utilisant System.Web ; en utilisant System.Web.UI ; en utilisant System.Web.UI.WebControls ; en utilisant System.Web.UI.HtmlControls ; en utilisant System.Data ; en utilisant System.Data.SqlClient ;
espace de noms monApp { classe publique calcTotals : Page { DataGrid MyGrid protégé ; double course privéeTotal = 0 ; } } |
Dans la structure de base du code de classe, vous devez utiliser les instructions appropriées pour importer l'espace de noms (espace de noms). Dans la déclaration de classe, vous déclarez deux variables, l'une est la variable mappant le contrôle DataGrid (MyGrid) du formulaire Web dans le code de classe ; l'autre est la valeur double précision utilisée pour faire fonctionner les statistiques d'exécution dans la colonne Prix du DataGrid. .
Événement Page_Load
Dans l'événement Page_Load, tout ce que vous avez à faire est de vous connecter à SQL Server et d'exécuter une simple SqlCommand. Vous avez obtenu toutes les données de titre et de prix avec une valeur de prix > 0. Vous utilisez la méthode SqlCommand.ExecuteReader pour renvoyer un SqlDataReader et le lier directement au DataGrid (MyGrid).
protected void Page_Load (expéditeur de l'objet, EventArgs e) { SqlConnection myConnection = new SqlConnection("server=Localhost;database=pubs;uid=sa;pwd=;");//Créer une connexion SQL SqlCommand myCommand = new SqlCommand("SELECT titre, prix FROM Titres WHERE prix > 0", myConnection );//Créer une commande SQL
essayer { myConnection.Open();//Ouvrir la connexion à la base de données MyGrid.DataSource = myCommand.ExecuteReader();//Spécifier la source de données de DataGrid MyGrid.DataBind();//Lier les données à DataGrid myConnection.Close();//Fermer la connexion de données} attraper(Exception ex) { //Détectez l'erreur HttpContext.Current.Response.Write(ex.ToString()); } } |
Méthode CalcTotals
La méthode CalcTotals est utilisée pour gérer la variable runningTotal. Cette valeur sera transmise sous forme de chaîne. Vous devez l'analyser comme un double, puis la variable runningTotal devient un double.
privé vide CalcTotal (string _price) { essayer { runningTotal += Double.Parse(_price); } attraper { //erreur de capture} } |
Événement MyGrid_ItemDataBound
L'événement MyGrid_ItemDataBound est appelé lorsque chaque ligne de la source de données est liée au DataGrid. Dans ce gestionnaire d'événements, vous pouvez traiter chaque ligne de données. Pour vos besoins ici, vous devrez appeler la méthode CalcTotals et transmettre le texte de la colonne Prix et formater la colonne Prix de chaque ligne avec un montant et afficher la valeur runningTotal dans la ligne de pied de page.
public void MyDataGrid_ItemDataBound (expéditeur de l'objet, DataGridItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { CalcTotal(e.Item.Cells[1].Text); e.Item.Cells[1].Text = string.Format("{0:c}", Convert.ToDouble(e.Item.Cells[1].Text)); } sinon if(e.Item.ItemType == ListItemType.Footer ) { e.Item.Cells[0].Text="Total"; e.Item.Cells[1].Text = string.Format("{0:c}", runningTotal); } } |
Dans le gestionnaire d'événements MyGrid_ItemDataBound, vous devez d'abord utiliser ListItemType pour déterminer si le DataGridItem actuel est un élément de données ou une ligne AlternatingItem. Pour les éléments de données, vous appelez CalcTotals et lui transmettez la valeur de la colonne Prix en tant que paramètre, puis vous formatez et colorez la colonne Prix au format montant.
Si le DataGridItem est un pied de page, runningTotal peut être affiché au format montant.
Résumer
Dans ce guide, vous avez appris à utiliser l'événement DataGrid.OnItemDataBound pour effectuer des statistiques d'exécution sur une colonne DataGrid. À l'aide de cet événement, vous pouvez créer un total de colonne et colorer le pied de page d'une ligne DataGrid.