DevTrain

Autor: Bernhard Grojer

Sofortiges Datenbankupdate mit dem Gridview-Control

Manchmal ist es gewünscht, bestimmte Werte in einem Gridview zu ändern, ohne den Umweg über den Edit oder Update Button gehen zu müssen.

Um dies umzusetzen kommen wir um ein paar Zeilen Code nicht rum.
Das Gridview wird ein Template-Field benötigt, durch das ein Postback ausgelöst werden kann. In diesem Fall verwende ich eine Checkbox:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID" DataSourceID="SqlDataSource1">
    <Columns>
        <asp:BoundField DataField="ProductID" HeaderText="ProductID" InsertVisible="False" ReadOnly="True" SortExpression="ProductID" />
        <asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" />
        <asp:TemplateField HeaderText="Discontinued" SortExpression="Discontinued">
            <ItemTemplate>
                <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("Discontinued") %>' AutoPostBack="True" OnCheckedChanged="CheckBox1_CheckedChanged" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" 
    SelectCommand="SELECT [ProductID], [ProductName], [Discontinued] FROM [Products]">
</asp:SqlDataSource>


Im Code wird nun der nötige SQL-Update-Befehl abgesetzt und das Gridview neu gebunden:

    Protected Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim chk As CheckBox = DirectCast(sender, CheckBox)
        Dim grd As GridView = chk.NamingContainer.NamingContainer
        Dim ProductID As Integer = grd.DataKeys(DirectCast(chk.NamingContainer, GridViewRow).DataItemIndex).Value
        Dim conn As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("NorthwindConnectionString").ConnectionString.ToString())
        Dim cmd As New SqlCommand("Update Products SET Discontinued=@Discontinued Where ProductID=@ProductID", conn)
        cmd.Parameters.AddWithValue("@Discontinued", chk.Checked)
        cmd.Parameters.AddWithValue("@ProductID", ProductID)
        conn.Open()
        cmd.ExecuteNonQuery()
        conn.Close()
        cmd.Dispose()
        conn.Dispose()
        Page.DataBind()
    End Sub

Diskutieren Sie in den Foren


Erfasst am: 29.03.2007 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=1004
© Copyright 2003 ppedv AG - http://www.ppedv.de