Exemplarische Vorgehensweise: Durchführen von Massenaktualisierungen von Zeilen, die an ein GridView-Webserversteuerelement gebunden sind
Aktualisiert: November 2007
Wenn die Bearbeitung für ein GridView-Steuerelement aktiviert ist, kann standardmäßig nur jeweils eine Zeile bearbeitet werden. In dieser exemplarischen Vorgehensweise wird beschrieben, wie Sie die Funktionalität des GridView-Steuerelements erweitern, sodass mehrere Zeilen gleichzeitig bearbeitet und anschließend alle Änderungen durch Klicken auf eine Schaltfläche gespeichert werden können. Dabei wird ein SqlDataSource-Steuerelement verwendet, um Ergebnisse aus der Datenquelle abzurufen und Aktualisierungen zu verwalten. Das SqlDataSource-Steuerelement fungiert als Datenquelle für das GridView-Steuerelement.
In dieser exemplarischen Vorgehensweise werden folgende Aufgaben beschrieben:
Verbinden mit einer SQL Server-Datenbank in Microsoft Visual Web Developer.
Verwenden des SqlDataSource-Steuerelements zum Verwalten des Datenzugriffs.
Anzeigen der von der Datenbank im GridView-Steuerelement zurückgegebenen Daten.
Konfigurieren des GridView-Steuerelements, um die Bearbeitung mehrerer Zeilen auf einmal zuzulassen.
Vorbereitungsmaßnahmen
Für die Durchführung dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:
Visual Web Developer (Visual Studio)
Microsoft Data Access Components (MDAC), Version 2.7 oder höher
Wenn Sie Microsoft Windows XP oder Windows Server 2003 verwenden, verfügen Sie bereits über MDAC 2.7. Wenn Sie jedoch Microsoft Windows 2000 verwenden, müssen Sie möglicherweise die bereits auf dem Computer installierte Version von MDAC aktualisieren. Weitere Informationen finden Sie in der MSDN Library im Artikel Microsoft Data Access Components (MDAC) Installation.
Zugriff auf die Northwind-Datenbank in SQL Server. Wenn Sie eine Kopie der Datenbank Northwind für SQL Server benötigen, lesen Sie den Abschnitt Installing Sample Databases in SQL Server 2005 Books Online.
Hinweis:
Wenden Sie sich an den Serveradministrator, wenn Sie Informationen zur Anmeldung an dem Computer benötigen, auf dem SQL Server ausgeführt wird.
Erstellen der Website
Wenn Sie bereits in Exemplarische Vorgehensweise: Erstellen einer einfachen Webseite in Visual Web Developer eine Website in Visual Web Developer erstellt haben, können Sie diese Website verwenden und zum nächsten Abschnitt übergehen. Erstellen Sie andernfalls eine neue Website und eine neue Webseite, indem Sie die unten aufgeführten Schritte ausführen.
So erstellen Sie eine Dateisystem-Website
Öffnen Sie Visual Web Developer.
Klicken Sie im Menü Datei auf Neu, und klicken Sie anschließend auf Website. Wenn Sie Visual Web Developer Express verwenden, klicken Sie im Menü Datei auf Neue Website.
Das Dialogfeld Neue Website wird angezeigt.
Klicken Sie unter Von Visual Studio installierte Vorlagen auf ASP.NET-Website.
Klicken Sie in der Liste Speicherort auf Dateisystem, und geben Sie dann den Namen des Ordners ein, in dem die Seiten der Website gespeichert werden sollen.
Geben Sie z. B. den Ordnernamen C:\WebSites\BulkUpdate ein.
Klicken Sie in der Liste Sprache auf die Programmiersprache, mit der Sie arbeiten möchten.
Klicken Sie auf OK.
Visual Web Developer erstellt den Ordner sowie eine neue Seite mit dem Namen Default.aspx.
Hinzufügen einer Datenquelle für das GridView-Steuerelement
Wenn Sie Daten auf einer ASP.NET-Webseite anzeigen möchten, benötigen Sie Folgendes:
Eine Verbindung zu einer Datenquelle, z. B. einer Datenbank.
In der folgenden Prozedur erstellen Sie eine Verbindung mit der SQL Server-Datenbank Northwind.
Ein Datenquellensteuerelement auf der Seite, das zum Lesen und Schreiben von Daten mit der Datenquelle (der Datenbank) interagiert.
Ein Steuerelement auf der Seite zum Anzeigen der Daten.
In der folgenden Prozedur zeigen Sie Daten in einem GridView-Steuerelement an. Das GridView-Steuerelement ruft seine Daten aus einem SqlDataSource-Steuerelement ab.
So fügen Sie eine Datenquelle für das GridView-Steuerelement hinzu
Öffnen Sie die Seite Default.aspx, oder wechseln Sie zu dieser Seite.
Wechseln Sie in die Entwurfsansicht.
Ziehen Sie in der Toolbox von der Registerkarte Daten ein SqlDataSource-Steuerelement auf die Seite.
Wenn das Smarttag SqlDataSource-Aufgaben nicht angezeigt wird, klicken Sie mit der rechten Maustaste auf das SqlDataSource-Steuerelement und dann auf Smarttag anzeigen.
Klicken Sie im Bereich SqlDataSource-Aufgaben auf Datenquelle konfigurieren.
Der Assistent Datenquelle konfigurieren wird angezeigt.
Klicken Sie auf Neue Verbindung.
Das Dialogfeld Verbindung hinzufügen wird angezeigt.
Führen Sie bei Bedarf einen der unten genannten Schritte aus. Die genaue Benutzeroberfläche hängt davon ab, welche Datenverbindungen Sie zuvor in Visual Web Developer eingerichtet haben.
Wenn in der Liste Datenquelle der Eintrag Microsoft SQL Server (SqlClient) nicht angezeigt wird, klicken Sie auf Ändern, und wählen Sie im Dialogfeld Datenquelle wechseln den Eintrag Microsoft SQL Server aus.
Wenn statt des Dialogfelds Verbindungseigenschaften das Dialogfeld Datenquelle auswählen angezeigt wird, wählen Sie in der Liste Datenquelle den Typ der Datenquelle aus, die Sie verwenden. Für diese exemplarische Vorgehensweise ist der Datenquellentyp Microsoft SQL Server. Klicken Sie in der Liste Datenanbieter auf .NET Framework-Datenanbieter für SQL Server, und klicken Sie danach auf Weiter.
Geben Sie auf der Seite Verbindung hinzufügen im Textfeld Servername den Namen des Computers ein, auf dem die SQL Server-Datenbank Northwind ausgeführt wird.
Wählen Sie unter Beim Server anmelden die entsprechende Option für den Zugriff auf die SQL Server-Datenbank aus (integrierte Sicherheit oder bestimmter Benutzername und Kennwort). Geben Sie einen Benutzernamen und ein Kennwort ein, falls erforderlich.
Hinweis:
Wenden Sie sich an den Serveradministrator, wenn Sie Informationen zur Anmeldung an dem Computer benötigen, auf dem SQL Server ausgeführt wird.
Wenn Sie ein Kennwort eingegeben haben, aktivieren Sie das Kontrollkästchen Kennwort speichern.
Klicken Sie auf Wählen Sie einen Datenbanknamen aus, oder geben Sie ihn ein, und geben Sie dann Northwind ein.
Klicken Sie auf Testverbindung, und wenn Sie sicher sind, dass sie funktioniert, klicken Sie auf OK.
Klicken Sie im Assistenten Datenquelle konfigurieren auf Weiter.
Stellen Sie sicher, dass das Kontrollkästchen Ja, diese Verbindung speichern als aktiviert ist.
Nennen Sie die Verbindung NorthwindConnectionString, und klicken Sie dann auf Weiter.
Wählen Sie auf der Seite Die Select-Anweisung konfigurieren die Option Spalten von einer Tabelle oder Ansicht angeben aus.
Wählen Sie in der Liste Name die Option Employees aus.
Wählen Sie unter SpaltenEmployeeId, LastName und FirstName aus.
Klicken Sie auf Erweitert.
Aktivieren Sie das Kontrollkästchen INSERT-, UPDATE- und DELETE-Anweisungen generieren, und klicken Sie dann auf OK.
Klicken Sie auf Weiter.
Klicken Sie auf Fertig stellen.
Hinzufügen eines GridView-Steuerelements zum Anzeigen von Daten
Nachdem Sie ein Datenquellensteuerelement zum Verwalten von Daten konfiguriert haben, müssen Sie der Seite ein Steuerelement zum Anzeigen von Daten hinzufügen.
In der folgenden Prozedur zeigen Sie Daten in einem GridView-Steuerelement an. Das GridView-Steuerelement ruft seine Daten aus dem zuvor hinzugefügten SqlDataSource-Steuerelement ab.
Damit die Benutzer den gesamten Inhalt des GridView-Steuerelements auf einmal bearbeiten können (anstatt die Zeilen nacheinander zu bearbeiten), müssen Sie das GridView-Steuerelement anpassen. Sie ersetzen die standardmäßigen Anzeigeelemente in den jeweiligen Spalten durch bearbeitbare Elemente und binden diese anschließend an die Datenquelle. Hierfür erstellen Sie TemplateField-Spalten. In der ItemTemplate der einzelnen TemplateField-Spalten fügen Sie ein gebundenes TextBox-Steuerelement hinzu, in dem Benutzer die Daten bearbeiten können.
So fügen Sie ein GridView-Steuerelement hinzu und konfigurieren es, um Daten anzuzeigen
Stellen Sie sicher, dass Sie sich in der Entwurfsansicht für die Seite Default.aspx befinden.
Ziehen Sie in der Toolbox von der Registerkarte Daten ein GridView-Steuerelement auf die Seite.
Wählen Sie im Bereich GridView-Aufgaben aus dem Listenfeld Datenquelle auswählen das zuvor hinzugefügte SqlDataSource-Steuerelement SqlDataSource1 aus.
Wählen Sie Paging aktivieren aus.
Klicken Sie auf Spalten bearbeiten.
Das Dialogfeld Felder wird angezeigt.
Wählen Sie unter Ausgewählte FelderFirstName aus.
Klicken Sie auf die Verknüpfung Dieses Feld in ein TemplateField konvertieren.
Konvertieren Sie das Feld LastName in ein Vorlagenfeld, indem Sie genauso vorgehen wie für das Feld FirstName. Konvertieren Sie das Feld EmployeeId nicht, da es den Primärschlüssel enthält und daher nicht editierbar ist.
Klicken Sie auf OK.
Klicken Sie im Bereich GridView-Aufgaben auf Vorlagen bearbeiten.
Klicken Sie in der Liste Anzeige unter FirstName auf EditItemTemplate.
Das GridView-Steuerelement zeigt einen bearbeitbaren Bereich mit dem Standardlayout für die Spalte FirstName im Bearbeitungsmodus an.
Klicken Sie mit der rechten Maustaste auf das TextBox-Steuerelement in der EditItemTemplate, und klicken Sie dann auf Kopieren.
Klicken Sie mit der rechten Maustaste auf das GridView-Steuerelement, und klicken Sie dann auf Smarttag anzeigen.
Klicken Sie in der Liste Anzeige unter FirstName auf ItemTemplate.
Das GridView-Steuerelement zeigt nun das Standardlayout für die Spalte FirstName im Anzeigemodus an.
Löschen Sie das vorhandene Label-Steuerelement.
Klicken Sie mit der rechten Maustaste in den bearbeitbaren Bereich von ItemTemplate, und klicken Sie dann auf Einfügen.
Sie haben das TextBox-Steuerelement zusammen mit seiner Datenbindungskonfiguration aus dem EditItemTemplate-Layout in das ItemTemplate-Layout kopiert.
Wählen Sie das TextBox-Steuerelement aus, und legen Sie im Eigenschaftenfenster die (ID)-Eigenschaft auf FirstNameTextBox fest. Dadurch wird sichergestellt, dass das eingefügte TextBox-Steuerelement eine andere ID aufweist als das kopierte Steuerelement.
Legen Sie die MaxLength-Eigenschaft auf 10 fest (die maximale Länge des Felds in der Datenbank).
Dadurch wird sichergestellt, dass die Benutzer nicht mehr Informationen eingeben, als das Feld FirstName in der Datenbank aufnehmen kann.
Wiederholen Sie die vorausgehenden neun Schritte, ändern Sie aber dieses Mal LastName-Vorlagenfeld. Ersetzen Sie das vorhandene Label-Steuerelement durch ein TextBox, das aus dem EditItemTemplate-Layout kopiert wurde, und legen Sie die ID-Eigenschaft auf LastNameTextBox fest.
Geben Sie für die MaxLength-Eigenschaft des TextBox-Steuerelements den Wert 20 an.
Klicken Sie mit der rechten Maustaste auf das GridView-Steuerelement, und klicken Sie dann auf Vorlagenbearbeitung beenden.
Hinzufügen einer Prozedur zum Durchführen von Massenaktualisierungen
Nachdem Sie das GridView-Steuerelement für die Anzeige bearbeitbarer Daten konfiguriert haben, müssen Sie Code zur Durchführung der Massenaktualisierung hinzufügen. In diesem Abschnitt führen Sie folgende Aufgaben aus:
Hinzufügen eines Button-Steuerelements und Hinzufügen von Code in seinem Click-Handler, um anhand der Änderungen aus den Zeilen des GridView-Steuerelements eine Massenaktualisierung durchzuführen.
Hinzufügen eines DataTable-Objekts, in dem die ursprünglichen Datenwerte gespeichert sind.
Hinzufügen von Code, um zu bestimmen, ob eine Zeile geändert wurde. Die im GridView-Steuerelement aktuell angezeigten Werte werden mit den im DataTable-Objekt gespeicherten ursprünglichen Werten verglichen. Wenn einer oder mehrere angezeigte Werte nicht mit den ursprünglichen Werten übereinstimmen, wird die Zeile in der Datenbank aktualisiert. Andernfalls wird die Zeile bei der Massenaktualisierung ignoriert.
So erstellen Sie eine Prozedur zum Durchführen der Massenaktualisierung
Wechseln Sie in die Entwurfsansicht.
Wählen Sie das GridView-Steuerelement aus, und klicken Sie im Eigenschaftenfenster auf die Schaltfläche Ereignisse (
), um die Ereignisse für das GridView-Steuerelement anzuzeigen.
Geben Sie im Feld RowDataBound die Zeichenfolge GridView1_RowDataBound ein, und drücken Sie die EINGABETASTE.
Visual Web Developer erstellt einen Ereignishandler für das RowDataBound-Ereignis des GridView-Steuerelements. Der Code sieht wie im folgenden Codebeispiel aus.
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound End Sub
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { }
Ersetzen Sie die generierte Prozedur durch den folgenden Code (einschließlich der privaten Variablen).
Private tableCopied As Boolean = False Private originalDataTable As System.Data.DataTable Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If Not tableCopied Then originalDataTable = CType(e.Row.DataItem, System.Data.DataRowView).Row.Table.Copy() ViewState("originalValuesDataTable") = originalDataTable tableCopied = True End If End If End Sub
private bool tableCopied = false; private DataTable originalDataTable; protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) if (!tableCopied) { originalDataTable = ((DataRowView)e.Row.DataItem).Row.Table.Copy(); ViewState["originalValuesDataTable"] = originalDataTable; tableCopied = true; } }
Der Code wird immer dann ausgeführt, wenn das GridView-Steuerelement Daten bindet. Während die erste Zeile gebunden wird, speichert der Code eine Kopie der ursprünglichen Datenbankwerte in einem DataTable-Objekt, das wiederum im ViewState gespeichert wird.
Wechseln Sie in die Entwurfsansicht.
Ziehen Sie in der Toolbox von der Registerkarte Standard ein Button-Steuerelement auf die Seite.
Klicken Sie im Eigenschaftenfenster auf die Schaltfläche Eigenschaften (
), um die Eigenschaften für das Button-Steuerelement anzuzeigen.
Geben Sie im Feld (ID) die Zeichenfolge UpdateButton ein.
Geben Sie im Feld Text die Zeichenfolge Update ein.
Klicken Sie auf die Schaltfläche Ereignisse (
), um Ereignisse für das Button-Steuerelement anzuzeigen.
Geben Sie im Feld Klicken die Zeichenfolge UpdateButton_Click ein, und drücken Sie die EINGABETASTE.
Visual Web Developer erstellt einen Ereignishandler für das Click-Ereignis des Button-Steuerelements. Der Code sieht wie im folgenden Codebeispiel aus.
Protected Sub UpdateButton_Click(ByVal sender As Object, ByVal e As EventArgs) End Sub
protected void UpdateButton_Click(object sender, EventArgs e) { }
Ersetzen Sie die generierte Prozedur durch den folgenden Code.
Protected Sub UpdateButton_Click(ByVal sender As Object, ByVal e As EventArgs) originalDataTable = CType(ViewState("originalValuesDataTable"), System.Data.DataTable) For Each r As GridViewRow In GridView1.Rows If IsRowModified(r) Then GridView1.UpdateRow(r.RowIndex, False) Next ' Rebind the Grid to repopulate the original values table. tableCopied = False GridView1.DataBind() End Sub Protected Function IsRowModified(ByVal r As GridViewRow) As Boolean Dim currentID As Integer Dim currentLastName As String Dim currentFirstName As String currentID = Convert.ToInt32(GridView1.DataKeys(r.RowIndex).Value) currentLastName = CType(r.FindControl("LastNameTextBox"), TextBox).Text currentFirstName = CType(r.FindControl("FirstNameTextBox"), TextBox).Text Dim row As System.Data.DataRow = _ originalDataTable.Select(String.Format("EmployeeID = {0}", currentID))(0) If Not currentLastName.Equals(row("LastName").ToString()) Then Return True If Not currentFirstName.Equals(row("FirstName").ToString()) Then Return True Return False End Function
protected void UpdateButton_Click(object sender, EventArgs e) { originalDataTable = (DataTable)ViewState["originalValuesDataTable"]; foreach (GridViewRow r in GridView1.Rows) if (IsRowModified(r)) { GridView1.UpdateRow(r.RowIndex, false); } // Rebind the Grid to repopulate the original values table. tableCopied = false; GridView1.DataBind(); } protected bool IsRowModified(GridViewRow r) { int currentID; string currentLastName; string currentFirstName; currentID = Convert.ToInt32(GridView1.DataKeys[r.RowIndex].Value); currentLastName = ((TextBox)r.FindControl("LastNameTextBox")).Text; currentFirstName = ((TextBox)r.FindControl("FirstNameTextBox")).Text; DataRow row = originalDataTable.Select(String.Format("EmployeeID = {0}", currentID))[0]; if (!currentLastName.Equals(row["LastName"].ToString())) { return true; } if (!currentFirstName.Equals(row["FirstName"].ToString())) { return true; } return false; }
Hinweis:
Die Prozedur vergleicht den Wert jedes bearbeitbaren TextBox-Steuerelements mit dem Wert im zwischengespeicherten DataTable-Objekt. Wenn Sie den Text im TextBox-Steuerelement formatiert haben, kann es sein, dass die Werte zwar identisch sind, ihre Darstellungen als Zeichenfolgen aber nicht übereinstimmen. Wenn Sie z. B. einen DateTime-Wert mit dem kurzen Datumsformat ({0:d}) formatiert haben, könnte der Datumswert für das TextBox-Steuerelement 3/2/2005 lauten. Die Darstellung der Zeichenfolge als Datumswerts im DataTable-Objekt wäre jedoch 3/2/2005 12:00 AM. In diesen Fällen müssen Sie Vergleichslogik hinzufügen, die Formate und Lokalisierungseinstellungen berücksichtigt.
Die Prozedur durchläuft die Zeilen des GridView-Steuerelements und ruft die benutzerdefinierte IsRowModified-Funktion für jede Zeile auf. Die Funktion vergleicht die aktuelle Zeile mit der entsprechenden Zeile im DataTable-Objekt und gibt true zurück, wenn sich die Zeile geändert hat. Der Code im Click-Handler der Schaltfläche ruft für alle geänderten Zeilen die UpdateRow-Methode des GridView-Steuerelements auf.
Testen der Seite
Nun können Sie die Seite ausführen, um den Code zu testen.
So testen Sie die Seite
Drücken Sie STRG+F5, um die Seite auszuführen.
Die Seite wird im Browser angezeigt. Das GridView-Steuerelement zeigt die Datenzeilen aus der Tabelle Employees der Datenbank Northwind in bearbeitbaren Datenseiten an.
Ändern Sie einige Werte.
Klicken Sie auf Aktualisieren.
Die geänderten Zeilen werden in der Datenbank aktualisiert.
Schließen Sie den Browser.
Nächste Schritte
In dieser exemplarischen Vorgehensweise wurde veranschaulicht, wie Sie die Funktionalität des GridView-Steuerelements erweitern können, um auf einer ASP.NET-Webseite mehrere Datenzeilen gleichzeitig zu aktualisieren. Sie können die Anwendung auch erweitern, um neue Datenzeilen mit einem DetailsView-Steuerelement oder FormView-Steuerelement hinzuzufügen. Darüber hinaus können Sie zum Bearbeiten von Werten auch andere Steuerelemente als das TextBox-Steuerelement zulassen, z. B. ein DropDownList-Steuerelement. Weitere Informationen finden Sie unter den folgenden Themen:
Siehe auch
Aufgaben
Gewusst wie: Sichern von Verbindungszeichenfolgen bei der Verwendung von Datenquellensteuerelementen
Exemplarische Vorgehensweise: Grundlegender Datenzugriff auf Webseiten