所以我在 OnRowUpdating 事件期间在 Gridview 中进行更新时遇到问题。
我想做的是在 SqlDataSource 中设置 UpdateCommand,然后使用该命令进行更新。事件正常触发,但事件完成后,该行似乎永远不会更新。
C#:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
SqlDataSource1.UpdateCommand = "UPDATE A_Table SET Something = @AValue WHERE ID = " + e.RowIndex;
SqlDataSource1.Update();
}
编辑:重写了我的示例更新命令...它实际上是一个更新命令,而不是一个选择命令哈哈。
最佳答案
此处的其他答案非常正确地指出了您的 UpdateCommand
的问题。
正如我之前在评论中提到的,我只是指出这比您那里的要容易一些。将 GridView
与 SQLDataSource
一起使用时,只要您设置正确,就会为您完成很多工作。
首先,在 SQLDataSource
的标记中定义您的 UpdateCommand
,如下所示:
<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 ColA=@ColA, ColB=@ColB, ColC=@ColC,
WHERE ColPK=@ColPK">
</asp:SqlDataSource>
(ColPK
将是您要更新的表的主键)
然后,您可以在 GridView 标记中将“AutoGenerateEditButton”设置为 true,噗!您可以更新 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
等。但是基本的更新功能几乎是免费的!
关于c# - 代码隐藏中的 GridView RowUpdating SqlDataSource.Update,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7680153/