【问题标题】:.NET GridView update won't send a UserID to the SQL Query.NET GridView 更新不会将用户 ID 发送到 SQL 查询
【发布时间】:2010-11-19 16:19:02
【问题描述】:

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

首先,我尝试通过 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 没有获取任何用户 ID。

但是,如果我将&lt;asp:BoundField DataField="UserID" HeaderText="Users ID" SortExpression="UserID" /&gt; 添加到&lt;Columns&gt;,它就可以工作。

有什么方法可以让我在不必将 UserID 列添加到表中的情况下完成这项工作?

【问题讨论】:

    标签: .net sql gridview sqldatasource


    【解决方案1】:

    您可以使用 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>
    

    【讨论】:

      【解决方案2】:

      添加列并将Visible 设置为False

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

      【讨论】:

      • 我刚试过,不幸的是它不起作用。不过,感谢您的宝贵时间!
      猜你喜欢
      • 1970-01-01
      • 2023-01-31
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 2015-09-26
      相关资源
      最近更新 更多