.NET GridView更新不会将UserID发送到SQL查询

时间:2010-11-19 16:19:03

标签: .net sql gridview sqldatasource

我正在尝试学习如何使用基本网格视图控件来显示我的数据。

首先,我尝试通过aspx页面尽一​​切努力让自己更简单。

到目前为止,一切都运行良好,但我在使用更新查询时遇到了问题。

我想要的结果只是一个简单的2列表,它会显示一个用户名,然后是一个编辑按钮。

问题是,如果我没有在列中包含用户ID,则查询不会更新任何内容。

这是我的SqlDataSource代码:

<asp:SqlDataSource
    ID="sqlDataSource"
    runat="server"
    ConnectionString="<%$ ConnectionStrings:conn %>"
    SelectCommand="SELECT UserID, Name FROM tblUsers;"
    UpdateCommand="UPDATE tblUsers SET Name = @Name WHERE UserID = @UserID">
    <UpdateParameters>
        <asp:Parameter Name="Name" />
        <asp:Parameter Name="UserID" />
    </UpdateParameters>
</asp:SqlDataSource>

这是我的GridView:

<asp:GridView
    ID="Clients"
    DataSourceID="sqlDataSource"
    runat="server"
    AllowPaging="true"
    AllowSorting="true"
    PageSize="25"
    AutoGenerateColumns="False"
    DataKeyNames="UserID">
    <Columns>
        <asp:BoundField DataField="Name" HeaderText="Users Name" SortExpression="Name" />
        <asp:CommandField EditText="Edit" ShowEditButton="true" />
    </Columns>
</asp:GridView>

当我转到页面并单击编辑时,名称字段将更改为文本框,我可以选择更新或取消预期。

但是使用上面的代码,当我点击更新时,它只会再次显示普通表,而不会更改数据,因为SQL只是没有获得任何UserID。

但是,如果我将<asp:BoundField DataField="UserID" HeaderText="Users ID" SortExpression="UserID" />添加到<Columns>,则可以。

有没有办法让我在不必将UserID列添加到表中的情况下完成这项工作?

2 个答案:

答案 0 :(得分:3)

您可以使用OldValuesParameterFormatString:

<asp:SqlDataSource
    ID="sqlDataSource"
    runat="server"
    ConnectionString="<%$ ConnectionStrings:conn %>"
    OldValuesParameterFormatString="original_{0}"
    SelectCommand="SELECT UserID, Name FROM tblUsers;"
    UpdateCommand="UPDATE tblUsers SET Name = @Name WHERE UserID = @original_UserID">
    <UpdateParameters>
        <asp:Parameter Name="Name" />
        <asp:Parameter Name="original_UserID" />
    </UpdateParameters>
</asp:SqlDataSource>

答案 1 :(得分:1)

添加列并将Visible设置为False

<asp:BoundField DataField="UserID" Visible="False" />