Gridview 的(由 SqlDataSource 填充)更新没有更新,不知道如何跟踪

Gridview's (populated by SqlDataSource) Update is not updating, don't know how to trace

我还是 ASP.NET 的新手,现在,当我点击 "Update" 时,我的 Gridview 还不是 "updating"。这是我的 GridView 和 SqlDataSource 的方式:

<asp:GridView ID="ProjectTable" runat="server" AutoGenerateColumns="False" AutoGenerateEditButton="True" DataSourceID="PopulateProjectTable" DataKeyNames="ProjectID">
        <Columns>
            <asp:BoundField DataField="ProjectID" HeaderText="Project ID" ReadOnly="True" SortExpression="ProjectID" />
            <asp:BoundField DataField="ProjectDescription" HeaderText="Project Description" ReadOnly="True" SortExpression="ProjectDescription" />
            <asp:BoundField DataField="ProjectNotes" HeaderText="Project Notes" SortExpression="ProjectNotes" />
        </Columns>
    </asp:GridView>
    <asp:SqlDataSource ID="PopulateProjectTable" runat="server" ConnectionString="<%$ ConnectionStrings:sandboxConnectionString %>" SelectCommand="SELECT * FROM [Projects]" UpdateCommand="UPDATE [Projects] SET ProjectNotes = @project_notes">
        <UpdateParameters>
            <asp:Parameter Name="project_notes" Type="String" />
        </UpdateParameters>
</asp:SqlDataSource>

我后面的代码里没有代码。当我点击 "Edit" 时,第三列应该是 "editable"。当我点击 "Update" 时,该页面执行回发,但在第三列中输入的内容不会保留,而是会丢失。怎么回事?

另外,请问这个问题如何追溯?以后就是这样了,看看SQL这个字符串是什么。谢谢。

编辑:原来是一个错字导致了我的问题。问题已解决!

我会在点击更新时 运行 SQL 探查器。看看究竟是什么被发回了数据库。

您也应该看到您的参数。如果您有多个过滤器,请将过滤器设置为您正在查看的数据库,并通过再次点击更新按钮来尝试实时 运行 相同的测试。

请从这里修改您的更新命令

UpdateCommand="UPDATE [Projects] SET ProjectNotes = @project_notes"

至此

 UpdateCommand="UPDATE [Projects] SET ProjectNotes = @project_notes" WHERE ProjectID=@ProjectID

ProjectNotes 数据字段的拼写是否正确?您描述的问题听起来像是该字段未正确绑定。

请添加到您的数据源

 OnUpdated="OnDSUpdatedHandler">

并添加以下方法

  <script runat="server">
 private void OnDSUpdatedHandler(Object source, SqlDataSourceStatusEventArgs e) {

   var dbg = e;
     }
   </script>

在第

行设置断点
var dbg = e;

并检查该变量中的内容。答案应该在那里