SqlDataSource 同樣支援 GridView/DetailsView/FormView 的零程式碼資料修改。本教程詳細說明設定步驟與參數對應。
可手寫或透過「設定資料來源精靈」→「進階」→「自動產生命令」產生。
<asp:SqlDataSource ID="ProductsDS" runat="server"
ConnectionString="%$ ConnectionStrings:Northwind %$"
SelectCommand="SELECT ProductID, ProductName, UnitPrice FROM Products"
InsertCommand="INSERT INTO Products (ProductName, UnitPrice) VALUES (@ProductName, @UnitPrice)"
UpdateCommand="UPDATE Products SET ProductName=@ProductName, UnitPrice=@UnitPrice WHERE ProductID=@ProductID"
DeleteCommand="DELETE FROM Products WHERE ProductID=@ProductID">
<InsertParameters>
<asp:Parameter Name="ProductName" Type="String" />
<asp:Parameter Name="UnitPrice" Type="Decimal" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="ProductName" Type="String" />
<asp:Parameter Name="UnitPrice" Type="Decimal" />
<asp:Parameter Name="ProductID" Type="Int32" />
</UpdateParameters>
<DeleteParameters>
<asp:Parameter Name="ProductID" Type="Int32" />
</DeleteParameters>
</asp:SqlDataSource>
設定好命令後,GridView 智慧標籤會出現「啟用編輯」、「啟用刪除」;DetailsView/FormView 另增「啟用插入」。
DataKeyNames 指定的主鍵欄位會自動帶入 Update/Delete 參數 (前綴 original_ 可用於開放式並發)。ID 或 Bind("欄位名") 對應 Insert/Update 參數。InsertCommand="sp_InsertProduct"
InsertCommandType="StoredProcedure"
<InsertParameters>
<asp:Parameter Name="@ProductName" />
<asp:Parameter Name="@UnitPrice" />
<asp:Parameter Name="@NewID" Direction="Output" Type="Int32" />
</InsertParameters>
<asp:GridView ID="GridView1" DataSourceID="ProductsDS"
DataKeyNames="ProductID" AutoGenerateColumns="False"
AllowPaging="True" AllowSorting="True">
<Columns>
<asp:BoundField DataField="ProductID" ReadOnly="True" HeaderText="ID" />
<asp:BoundField DataField="ProductName" HeaderText="名稱" />
<asp:BoundField DataField="UnitPrice" HeaderText="價格" DataFormatString="{0:C}" />
<asp:CommandField ShowEditButton="True" ShowDeleteButton="True" />
</Columns>
</asp:GridView>
<asp:DetailsView ID="DetailsView1" DataSourceID="ProductsDS"
DataKeyNames="ProductID" AutoGenerateRows="False"
DefaultMode="Insert">
<Fields>
<asp:BoundField DataField="ProductName" HeaderText="名稱" />
<asp:BoundField DataField="UnitPrice" HeaderText="價格" />
<asp:CommandField ShowInsertButton="True" />
</Fields>
</asp:DetailsView>
DataKeyNames 正確、參數名稱與命令一致、資料型別相符。