C# GridView行更新SqlDataSource.Update from CodeBehind

C# GridView行更新SqlDataSource.Update from CodeBehind,c#,asp.net,sql,code-behind,sqldatasource,C#,Asp.net,Sql,Code Behind,Sqldatasource,因此,在OnRowUpdate事件期间,我在Gridview中执行更新时遇到了问题 我试图做的是在SqlDataSource中设置UpdateCommand,然后使用该命令进行更新。事件正在正常触发,但当事件完成时,行似乎从未更新 C: 编辑:重新编写了我的示例更新命令…它实际上是一个更新命令,而不是选择命令哈哈。您的更新命令应该是一个更新命令,而不是选择命令 将该行更改为与此更接近的内容: SqlDataSource1.UpdateCommand = "UPDATE A_Table SET S

因此,在OnRowUpdate事件期间,我在Gridview中执行更新时遇到了问题

我试图做的是在SqlDataSource中设置UpdateCommand,然后使用该命令进行更新。事件正在正常触发,但当事件完成时,行似乎从未更新

C:


编辑:重新编写了我的示例更新命令…它实际上是一个更新命令,而不是选择命令哈哈。

您的更新命令应该是一个更新命令,而不是选择命令

将该行更改为与此更接近的内容:

SqlDataSource1.UpdateCommand = "UPDATE A_Table SET Something = @Something WHERE ID = " + e.RowIndex;
有关如何使用UpdateCommand的更多信息,请参阅此msdn链接:


UpdateCommand应该是一个UPDATE命令,而不是SELECT命令

将该行更改为与此更接近的内容:

SqlDataSource1.UpdateCommand = "UPDATE A_Table SET Something = @Something WHERE ID = " + e.RowIndex;
有关如何使用UpdateCommand的更多信息,请参阅此msdn链接:

首先,UpdateCommand不应该像UPDATE A_Table SET ID=。。哪里

我想你错过了什么。阅读这是一篇很适合你的文章

编辑:如Kiley所说:尝试SqlDataSource1.UpdateCommand=updatea_Table SET Something=@somethine,其中ID=+e.RowIndex

首先,UpdateCommand不应该像UPDATE A_Table SET ID=。。哪里

我想你错过了什么。阅读这是一篇很适合你的文章


编辑:如Kiley所说:尝试SqlDataSource1.UpdateCommand=updatea_Table SET Something=@somethine,其中ID=+e.RowIndex

这里的其他答案非常正确地指出了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>

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

这里的其他答案非常正确地指出了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>

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

如果为GridView设置了DataKeyName,并且在SQLDataSource1标记中定义了UpdateCommand,则不必在RowUpdate事件中执行任何操作。在此处调用Update方法将导致更新发生两次。@jadarnel27是正确的;如果确实设置了DataKeyNames,则从RowUpdate处理程序调用Update将导致StackOverflowXeption!如果为GridView设置了DataKeyName,并且在SQLDataSource1标记中定义了UpdateCommand,则不必在RowUpdate事件中执行任何操作。在此处调用Update方法将导致更新发生两次。@jadarnel27是正确的;如果确实设置了DataKeyNames,则从RowUpdate处理程序调用Update将导致StackOverflowXeption!哎呀,这个例子实际上并不正确。我没有发布脚本,因为它包含一些敏感的信息,我只是写了一个考虑不周的例子。update命令实际上并不是问题所在,实际上让它执行是个问题。Opps,这个例子实际上并不正确。我没有发布脚本,因为它包含一些敏感的信息,我只是写了一个考虑不周的例子。update命令实际上并不是问题所在,让它执行才是问题所在。
<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>