Fügen Sie ein Gesamtfeld zu DataGrid in ASP.NET hinzu
Autor:Eve Cole
Aktualisierungszeit:2009-06-30 15:40:15
Eine der am häufigsten gestellten Fragen im Forum lautet: „Wie zeige ich Spaltensummen in einem DataGrid an?“ Ich habe persönlich schon oft Beispielcode für diese Frage bereitgestellt, daher wollte ich einen solchen Leitfaden unter dem Titel „DotNetJunkies“ bereitstellen. In dieser Anleitung erfahren Sie, wie Sie die Werte einer Spalte im DataGrid programmgesteuert zählen und den Gesamtwert in der Fußzeile des DataGrid anzeigen. Die herunterladbaren Beispiele in diesem Handbuch umfassen sowohl C#- als auch Visual Basic.NET-Code.
Das Endergebnis dieser Anleitung sieht folgendermaßen aus:
Wie auf dem Bild oben zu sehen ist:
Das DataGrid im oben verwendeten Bildschirmbild ist ein sehr typisches DataGrid. Es gibt viele Eigenschaften, die das Erscheinungsbild des DataGrid steuern, das zwei BoundColumns zum Bearbeiten von Daten verwendet, aber das ist nicht das Wichtigste. Um dies richtig zu machen, ist es wirklich wichtig, das DataGrid.OnItemDataBound-Ereignis zu verwenden. Dieses Ereignis wird jedes Mal ausgelöst, wenn ein Datensatz an das DataGrid gebunden wird. Sie können für dieses Ereignis einen Event-Handler erstellen, um den Datensatz zu manipulieren. In diesem Fall erhalten Sie zur Laufzeit den Gesamtwert der Preisspalte.
Die Fußzeile bezieht sich auf die letzte Zeile des Datenbereichs. Wenn diese Zeile qualifiziert ist, können Sie während der Ereignisverarbeitung die Laufzeitstatistik der Preisspalte abrufen.
Umsetzung :
Lassen Sie uns zunächst einen Weg finden, die Web Forms-Ausgabe zu manipulieren. In diesem Tutorial verwenden Sie ein Webformular (calcTotals.aspx) und eine Klassencodedatei (calcTotals.aspx.cs). Der Zweck dieses Handbuchs besteht darin, dass der Klassencode mit einem Just-In-Time-Compiler kompiliert wird. Hier ist der Code für calcTotals.aspx:
<%@ Page Inherits="myApp.calcTotals" Src="20010731T0101.aspx.cs" %>
|
AutoGenerateColumns="False" CellPadding="4" CellSpacing="0" BorderStyle="Solid" BorderWidth="1" Gridlines="Keine" BorderColor="Schwarz" ItemStyle-Font-Name="Verdana" ItemStyle-Font-Size="9pt" HeaderStyle-Font-Name="Verdana" HeaderStyle-Font-Size="10pt" HeaderStyle-Font-Bold="True" HeaderStyle-ForeColor="Weiß" HeaderStyle-BackColor="Blau" FooterStyle-Font-Name="Verdana" FooterStyle-Font-Size="10pt" FooterStyle-Font-Bold="True" FooterStyle-ForeColor="Weiß" FooterStyle-BackColor="Blau" OnItemDataBound="MyDataGrid_ItemDataBound" ShowFooter="True">
|
ItemStyle-HorizontalAlign="Rechts" HeaderStyle-HorizontalAlign="Center" />
|
In Web Forms verwenden Sie @Page, um den Klassencode, den die Seite erbt, direkt zu deklarieren. Das SRC-Attribut gibt an, dass der Klassencode mit dem JIT-Compiler kompiliert wird. Die meisten Codestildeklarationen in Web Forms werden verwendet, um das DataGrid besser aussehen zu lassen.
Eine der letzten angegebenen Eigenschaften ist die OnItemDataBound-Eigenschaft. Dieses Ereignis wird ausgelöst, wenn das OnItemDataBound-Ereignis auftritt.
Das DataGrid (MyGrid) im Webformular enthält zwei BoundColumns, eine ist „Titel“ und die andere ist „Preis“. Hier werden die Titel- und Preisspalten der Titles-Tabelle in der Pubs-Datenbank (SQL Server) angezeigt.
Codedefinitionen ignorieren
Der Klassencode wird überall verwendet. Im Klassencode können Sie zwei Ereignisse ausführen: das Page_Load-Ereignis und das MyGrid_OnItemDataBound-Ereignis. Es gibt auch eine private Methode CalcTotal, mit der sich einfach mathematische Operationen an Laufzeitstatistiken durchführen lassen.
Der Anfang des grundlegenden Strukturblocks des Klassencodes:
Verwenden des Systems; mit System.Web; mit System.Web.UI; mit System.Web.UI.WebControls; mit System.Web.UI.HtmlControls; Verwenden von System.Data; Verwenden von System.Data.SqlClient;
Namespace myApp { öffentliche Klasse calcTotals: Seite { geschütztes DataGrid MyGrid; privates Double RunningTotal = 0; } } |
In der Grundstruktur des Klassencodes müssen Sie die entsprechenden Anweisungen verwenden, um den Namespace (Namespace) zu importieren. In der Klassendeklaration deklarieren Sie zwei Variablen, eine ist die Variable, die das DataGrid-Steuerelement (MyGrid) des Webformulars im Klassencode abbildet, die andere ist der Wert mit doppelter Genauigkeit, der zum Betrieb der Laufzeitstatistiken in der Preisspalte des DataGrids verwendet wird .
Page_Load-Ereignis
Beim Page_Load-Ereignis müssen Sie lediglich eine Verbindung zu SQL Server herstellen und einen einfachen SqlCommand ausführen. Sie haben alle Titel- und Preisdaten mit einem Preiswert > 0 erhalten. Sie verwenden die SqlCommand.ExecuteReader-Methode, um einen SqlDataReader zurückzugeben und ihn direkt an das DataGrid (MyGrid) zu binden.
protected void Page_Load(object sender, EventArgs e) { SqlConnection myConnection = new SqlConnection("server=Localhost;database=pubs;uid=sa;pwd=;");//SQL-Verbindung erstellen SqlCommand myCommand = new SqlCommand("SELECT title, price FROM Titles WHERE price > 0", myConnection );//SQL-Befehl erstellen
versuchen { myConnection.Open();//Öffnen Sie die Datenbankverbindung MyGrid.DataSource = myCommand.ExecuteReader();//Geben Sie die Datenquelle von DataGrid an. MyGrid.DataBind();//Binden Sie Daten an DataGrid myConnection.Close();//Datenverbindung schließen} Catch (Ausnahme ex) { //Fehler abfangen HttpContext.Current.Response.Write(ex.ToString()); } } |
CalcTotals-Methode
Die CalcTotals-Methode wird verwendet, um die Variable „runningTotal“ zu verarbeiten. Dieser Wert wird als String übergeben. Sie müssen es als Double analysieren, und dann wird die Variable „runningTotal“ zu einem Double.
private void CalcTotal(string _price) { versuchen { runningTotal += Double.Parse(_price); } fangen { //Fehler abfangen} } |
MyGrid_ItemDataBound-Ereignis
Das MyGrid_ItemDataBound-Ereignis wird aufgerufen, wenn jede Zeile in der Datenquelle an das DataGrid gebunden ist. In diesem Event-Handler können Sie jede Datenzeile verarbeiten. Für Ihre Zwecke hier müssen Sie die CalcTotals-Methode aufrufen und den Text aus der Preisspalte übergeben, die Preisspalte jeder Zeile mit einem Betrag formatieren und den laufenden Gesamtwert in der Fußzeile anzeigen.
public void MyDataGrid_ItemDataBound(object sender, 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)); } sonst if(e.Item.ItemType == ListItemType.Footer ) { e.Item.Cells[0].Text="Total"; e.Item.Cells[1].Text = string.Format("{0:c}", runningTotal); } } |
Im MyGrid_ItemDataBound-Ereignishandler müssen Sie zunächst ListItemType verwenden, um zu bestimmen, ob das aktuelle DataGridItem ein Datenelement oder eine AlternatingItem-Zeile ist. Für Datenelemente rufen Sie CalcTotals auf und übergeben ihm den Wert der Preisspalte als Parameter. Anschließend formatieren und färben Sie die Preisspalte im Betragsformat.
Wenn das DataGridItem eine Fußzeile ist, kann runningTotal im Betragsformat angezeigt werden.
Zusammenfassen
In diesem Handbuch haben Sie erfahren, wie Sie das DataGrid.OnItemDataBound-Ereignis verwenden, um Laufzeitstatistiken für eine DataGrid-Spalte durchzuführen. Mit diesem Ereignis können Sie eine Spaltensumme erstellen und die Fußzeile einer DataGrid-Zeile einfärben.