GridView RowUpdate来自Code Behind的SqlDataSource.Update

时间:2011-10-06 20:35:04

标签: c# asp.net sql code-behind sqldatasource

所以我在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();
}

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

3 个答案:

答案 0 :(得分:2)

您的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

答案 1 :(得分:2)

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

我觉得你错过了什么。阅读Insert Update Edit Delete record in GridView。这是一篇很棒的文章。

编辑:像Kim说的那样:试试SqlDataSource1.UpdateCommand = "UPDATE A_Table SET Something = @Something WHERE ID = " + e.RowIndex;

答案 2 :(得分:2)

此处的其他答案在指出UpdateCommand的问题时非常正确。

正如我在前面的评论中所提到的,我只是指出这比你在那里更容易。使用带有GridView的{​​{1}}时,只要您设置正确,就可以完成很多工作。

首先,在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 ColA=@ColA, ColB=@ColB, ColC=@ColC, WHERE ColPK=@ColPK"> </asp:SqlDataSource> 将是您正在更新的表的主键)

然后,您可以在GridView标记中将“AutoGenerateEditButton”设置为true,噗!您可以更新ColPK(无需在后面的代码中执行任何操作)。

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事件。但基本的更新功能非常多免费!