GridView RowUpdating SqlDataSource.Update from CodeBehind

本文关键字:from CodeBehind Update SqlDataSource RowUpdating GridView | 更新日期: 2023-09-27 18:10:42

所以我在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();
}
编辑:重写了我的示例update命令…这实际上是一个更新命令,而不是一个选择命令哈哈。

GridView RowUpdating SqlDataSource.Update from CodeBehind

这里的其他答案在指出您的UpdateCommand的问题时非常正确。

正如我在前面的评论中提到的,我要指出的是,这比你在那里看到的要简单一些。当使用GridViewSQLDataSource时,只要设置正确,很多工作都可以为您完成。

首先,在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>

现在,如果您需要做额外的处理,或者基于某些逻辑取消Update,您仍然可以在代码中处理OnRowUpdating事件,等等。但是基本的更新功能几乎是免费的!

您的UpdateCommand应该是UPDATE命令,而不是SELECT命令。

SqlDataSource1.UpdateCommand = "SELECT Something FROM A_Table WHERE ID = " + e.RowIndex;

把这行改成更接近这个的值:

SqlDataSource1.UpdateCommand = "UPDATE A_Table SET Something = @Something WHERE ID = " + e.RowIndex;

有关如何使用UpdateCommand的更多信息,请参阅msdn链接:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.updatecommand.aspx

首先,UpdateCommand不应该像UPDATE A_Table SET ID = .. WHERE ... ?

我想你错过了什么。读取插入更新编辑删除GridView中的记录。这篇文章很适合你。

编辑:喜欢Kiley说:试试SqlDataSource1.UpdateCommand = "UPDATE A_Table SET Something = @Something WHERE ID = " + e.RowIndex;