GridView 多筆編輯批次存檔

GridView 多筆編輯批次存檔

GridView 預設的編輯儲存動作都是單筆的,若希望能 GridView 多筆編輯,按個鈕再進行批次儲存的動作,實作上相當簡單,只要四行程式碼就可以達成了,現在來看一下實作的步驟。

1.先將欲編輯的欄位轉成 TemplateField。
2.在 ItemTemplate 中置入可編輯的控制項,並繫結欄位。也可以 aspx 程式碼中直接把原來的 EditTemplate 直接改為 ItemTemplate。
3.按鈕後執行 GridView 批次異動的動作。

設計階段的畫面及 aspx 程式碼如下所示

 

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>未命名頁面</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="btnBatchUpdate" runat="server" Text="批次存檔" /><br />
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID"
            DataSourceID="SqlDataSource1" EmptyDataText="沒有資料錄可顯示。">
            <Columns>
                <asp:BoundField DataField="ProductID" HeaderText="ProductID" ReadOnly="True" SortExpression="ProductID" />
                <asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" />
                <asp:TemplateField HeaderText="UnitPrice" SortExpression="UnitPrice">
                    <ItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("UnitPrice") %>'></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="UnitsInStock" SortExpression="UnitsInStock">
                    <ItemTemplate>
                        <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("UnitsInStock") %>'></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Discontinued" SortExpression="Discontinued">
                    <ItemTemplate>
                        <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("Discontinued") %>' />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString1 %>"
            ProviderName="<%$ ConnectionStrings:NorthwindConnectionString1.ProviderName %>"
            SelectCommand="SELECT [ProductID], [ProductName], [UnitPrice], [UnitsInStock], [Discontinued] FROM [Products]"
            UpdateCommand="UPDATE [Products] SET [UnitPrice] = @UnitPrice, [UnitsInStock] = @UnitsInStock, [Discontinued] = @Discontinued WHERE [ProductID] = @ProductID">
            <UpdateParameters>
                <asp:Parameter Name="ProductName" Type="String" />
                <asp:Parameter Name="UnitPrice" Type="Decimal" />
                <asp:Parameter Name="UnitsInStock" Type="Int16" />
                <asp:Parameter Name="Discontinued" Type="Boolean" />
                <asp:Parameter Name="ProductID" Type="Int32" />
            </UpdateParameters>
        </asp:SqlDataSource>
    
    </div>
    </form>
</body>
</html>

 

再來就是在按下按鈕時撰寫 GridView 批次儲存的程式碼 

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub btnBatchUpdate_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnBatchUpdate.Click
        Dim N1 As Integer
        For N1 = 0 To GridView1.Rows.Count - 1
            '逐筆異動資料庫
            GridView1.UpdateRow(N1, False)
        Next
    End Sub

End Class


 

ASP.NET 魔法學院