這裏其他的答案都在你的UpdateCommand
指出的問題非常正確的。
正如我在前面的評論中提到的,我只是指出這比你在那裏更容易一些。當GridView
與SQLDataSource
一起使用時,只要設置正確,就可以完成大量工作。
首先,在標記定義UpdateCommand
爲SQLDataSource
,就像這樣:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="Your Connection String Here"
ProviderName="System.Data.SqlClient"
SelectCommand="SELECT ColPK, ColA, ColB, ColC FROM Table_Name"
UpdateCommand="UPDATE Table_Name
SET [email protected], [email protected], [email protected],
WHERE [email protected]">
</asp:SqlDataSource>
(ColPK
將要更新的表的主鍵)
然後,您可以在你的GridView標記中設置「AutoGenerateEditButton」爲true,並且poof!您可以更新GridView
(不必在後面的代碼中執行任何操作)。
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
AutoGenerateEditButton="True" DataKeyNames="ColPK"
DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="ColPK" HeaderText="Column PK"
SortExpression="ColA" ReadOnly="True" />
<asp:BoundField DataField="ColA" HeaderText="Column A"
SortExpression="ColA" />
<asp:BoundField DataField="ColB" HeaderText="Column B"
SortExpression="ColB" />
<asp:BoundField DataField="ColC" HeaderText="Column C"
SortExpression="ColC" />
</Columns>
</asp:GridView>
現在,你仍然可以處理OnRowUpdating
事件在你的代碼,如果你需要做額外的處理,或取消基於某些邏輯等,但基本的更新功能Update
幾乎是免費的!
如果您爲'GridView'設置了'DataKeyNames'(並且您已在'SQLDataSource1'標記中定義了'UpdateCommand'),那麼您不應該在'RowUpdating'事件中執行任何操作。在這裏調用'Update()'方法會導致'UPDATE'發生兩次。 – jadarnel27
@ jadarnel27是對的;如果設置了'DataKeyNames',則從'RowUpdating'處理程序調用'Update()'將導致一個StackOverflowExeption! –