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;
并检查该变量中的内容。答案应该在那里
我还是 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;
并检查该变量中的内容。答案应该在那里