Sdílet prostřednictvím


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.

    Aa992036.alert_note(de-de,VS.90).gifHinweis:

    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

  1. Öffnen Sie Visual Web Developer.

  2. 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.

  3. Klicken Sie unter Von Visual Studio installierte Vorlagen auf ASP.NET-Website.

  4. 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.

  5. Klicken Sie in der Liste Sprache auf die Programmiersprache, mit der Sie arbeiten möchten.

  6. 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

  1. Öffnen Sie die Seite Default.aspx, oder wechseln Sie zu dieser Seite.

  2. Wechseln Sie in die Entwurfsansicht.

  3. 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.

  4. Klicken Sie im Bereich SqlDataSource-Aufgaben auf Datenquelle konfigurieren.

    Der Assistent Datenquelle konfigurieren wird angezeigt.

  5. Klicken Sie auf Neue Verbindung.

    Das Dialogfeld Verbindung hinzufügen wird angezeigt.

  6. 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.

  7. 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.

  8. 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.

    Aa992036.alert_note(de-de,VS.90).gifHinweis:

    Wenden Sie sich an den Serveradministrator, wenn Sie Informationen zur Anmeldung an dem Computer benötigen, auf dem SQL Server ausgeführt wird.

  9. Wenn Sie ein Kennwort eingegeben haben, aktivieren Sie das Kontrollkästchen Kennwort speichern.

  10. Klicken Sie auf Wählen Sie einen Datenbanknamen aus, oder geben Sie ihn ein, und geben Sie dann Northwind ein.

  11. Klicken Sie auf Testverbindung, und wenn Sie sicher sind, dass sie funktioniert, klicken Sie auf OK.

  12. Klicken Sie im Assistenten Datenquelle konfigurieren auf Weiter.

  13. Stellen Sie sicher, dass das Kontrollkästchen Ja, diese Verbindung speichern als aktiviert ist.

  14. Nennen Sie die Verbindung NorthwindConnectionString, und klicken Sie dann auf Weiter.

  15. Wählen Sie auf der Seite Die Select-Anweisung konfigurieren die Option Spalten von einer Tabelle oder Ansicht angeben aus.

  16. Wählen Sie in der Liste Name die Option Employees aus.

  17. Wählen Sie unter SpaltenEmployeeId, LastName und FirstName aus.

  18. Klicken Sie auf Erweitert.

  19. Aktivieren Sie das Kontrollkästchen INSERT-, UPDATE- und DELETE-Anweisungen generieren, und klicken Sie dann auf OK.

  20. Klicken Sie auf Weiter.

  21. 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

  1. Stellen Sie sicher, dass Sie sich in der Entwurfsansicht für die Seite Default.aspx befinden.

  2. 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.

  3. Wählen Sie Paging aktivieren aus.

  4. Klicken Sie auf Spalten bearbeiten.

    Das Dialogfeld Felder wird angezeigt.

  5. Wählen Sie unter Ausgewählte FelderFirstName aus.

  6. Klicken Sie auf die Verknüpfung Dieses Feld in ein TemplateField konvertieren.

  7. 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.

  8. Klicken Sie auf OK.

  9. Klicken Sie im Bereich GridView-Aufgaben auf Vorlagen bearbeiten.

  10. 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.

  11. Klicken Sie mit der rechten Maustaste auf das TextBox-Steuerelement in der EditItemTemplate, und klicken Sie dann auf Kopieren.

  12. Klicken Sie mit der rechten Maustaste auf das GridView-Steuerelement, und klicken Sie dann auf Smarttag anzeigen.

  13. 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.

  14. Löschen Sie das vorhandene Label-Steuerelement.

  15. 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.

  16. 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.

  17. 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.

  18. 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.

  19. 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

  1. Wechseln Sie in die Entwurfsansicht.

  2. Wählen Sie das GridView-Steuerelement aus, und klicken Sie im Eigenschaftenfenster auf die Schaltfläche Ereignisse (Schaltfläche "Ereignisse" im Eigenschaftenfenster), um die Ereignisse für das GridView-Steuerelement anzuzeigen.

  3. 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)
    {
    
    }
    
  4. 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.

  5. Wechseln Sie in die Entwurfsansicht.

  6. Ziehen Sie in der Toolbox von der Registerkarte Standard ein Button-Steuerelement auf die Seite.

  7. Klicken Sie im Eigenschaftenfenster auf die Schaltfläche Eigenschaften (PropertySymbolButton-Bildschirmabbildung), um die Eigenschaften für das Button-Steuerelement anzuzeigen.

  8. Geben Sie im Feld (ID) die Zeichenfolge UpdateButton ein.

  9. Geben Sie im Feld Text die Zeichenfolge Update ein.

  10. Klicken Sie auf die Schaltfläche Ereignisse (Schaltfläche "Ereignisse" im Eigenschaftenfenster), um Ereignisse für das Button-Steuerelement anzuzeigen.

  11. 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)
    {
    
    }
    
  12. 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;
    }
    
    Aa992036.alert_note(de-de,VS.90).gifHinweis:

    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

  1. 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.

  2. Ändern Sie einige Werte.

  3. Klicken Sie auf Aktualisieren.

    Die geänderten Zeilen werden in der Datenbank aktualisiert.

  4. 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: Anzeigen einer Dropdownliste während das Bearbeitens im GridView-Webserver-Steuerelement

Exemplarische Vorgehensweise: Grundlegender Datenzugriff auf Webseiten