为什么我的SqlDataSource的UpdateCommand不起作用?

时间:2013-02-26 14:24:41

标签: asp.net webforms

<asp:SqlDataSource ID="HopefulDataSource" runat="server" 
    ConnectionString="<%$ ConnectionStrings:MyConnectionString %>" 
    SelectCommand= "SELECT id, regGroupID, amountReceived, other FROM table" 
    UpdateCommand="UPDATE table
                        SET [amountReceived] = @amountReceived
                        WHERE [regGroupID] = @regGroupID">
    <SelectParameters>
        <asp:ControlParameter ControlID="ddlCourses" Name="ddlSelectedCourse" PropertyName="SelectedValue" Type="String" />
    </SelectParameters>

    <UpdateParameters>
        <asp:Parameter Name="regGroupID"        Type="Int32" />
        <asp:Parameter Name="amountReceived"    Type="Decimal" />

        other parameters

        <asp:Parameter Name="id"                Type="Int32" />
    </UpdateParameters>
</asp:SqlDataSource>

当我将“WHERE [regGroupID] = @regGroupID”更改为

时,上述方法有效

WHERE [id] = @id

WHERE [regGroupID] = 2

1 个答案:

答案 0 :(得分:5)

您需要在DataKeyNames声明中的GridView集合中添加“regGroupID”。像这样:

<asp:GridView ID="yourGridViewId" DataKeyNames="regGroupID" ... >
    ...
</asp:GridView>

请参阅DataKeyNames documentation

  

您必须为自动设置DataKeyNames属性   更新和删除GridView控件的功能。价值   将这些关键字段传递给数据源控件以便   指定要更新或删除的行。

注意:自从我使用它以来已经有一段时间了,因此您可能需要同时包含主键和其他键字段。像这样:

DataKeyNames="id,regGroupID"