You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET GridView未显示数据库更新的OrderStatus数据问题

问题:GridView无法同步显示数据库更新后的OrderStatus字段值

我有一个PO编号搜索页面,通过SQL数据源拉取订单数据。数据库中OrderStatus字段已更新,但页面上的OrderGridView控件始终显示旧值,无法同步新状态。


相关代码

ASPX页面(OrderGridView部分)

<asp:gridview id="OrderGridView" CssClass="orderSearchOrderHeaderGridView" autogeneratecolumns="False" DataKeyNames="OrderID" emptydatatext="No data available." allowpaging="True" runat="server" OnRowCommand="OrderGridView_RowCommand">
    <RowStyle CssClass="gridViewRow" />
    <AlternatingRowStyle CssClass="gridViewAltRow" />
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:HiddenField ID="OrderID" runat="server" Value='<%# Eval("OrderID").ToString().Trim()%>' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="PONumber" HeaderText="PO Number" />
        <asp:BoundField DataField="OrderHeader.OrderChannel" HeaderText="Order Channel" />
        <asp:BoundField DataField="OrderHeader.OrderType" HeaderText="Order Type" />
        <asp:BoundField DataField="OrderHeader.OrderDate" HeaderText="Order Date" DataFormatString="{0:d}" />
        <asp:BoundField DataField="OrderHeader.FulfillmentLines" HeaderText="Fulfillment Lines" />
        <asp:BoundField DataField="OrderHeader.PrintLines" HeaderText="Print Lines" />
        <asp:BoundField DataField="OrderHeader.FoundationOrderID" HeaderText="Monarch Order ID" />
        <asp:BoundField DataField="OrderHeader.FoundationJobID" HeaderText="Monarch Job ID" />
        <asp:BoundField DataField="OrderHeader.OrderStatus" HeaderText="Order Status" />
        <asp:ButtonField HeaderText="View Order Details" Text="View Details" CommandName="viewDetails" ButtonType="Button" />
    </Columns>
</asp:gridview>

搜索按钮后台代码(BtnOrderSearch_Click)

protected void BtnOrderSearch_Click(Object sender, EventArgs e)
{
    try
    {
        OrderGridView.DataSource = null;
        OrderGridView.DataBind();

        OrderShipToGridView.DataSource = null;
        OrderShipToGridView.DataBind();
        OrderShipToGridView.Visible = false;

        OrderLinesGridView.DataSource = null;
        OrderLinesGridView.DataBind();
        OrderLinesGridView.Visible = false;

        if (!string.IsNullOrEmpty(OrderSearchTextbox.Text.Trim()))
        {
            string orderPoNumber = OrderSearchTextbox.Text;
            Dictionary<int, Order> orderSearch = Functions.RetrieveOrdersByPO(orderPoNumber);

            OrderGridView.DataSource = orderSearch.Values;
            OrderGridView.DataBind();
        }
        else
        {
            Response.Write("<script>alert('No PO number entered.  Please enter a valid PO number and try again.'); location.href='ordersearch.aspx'</script>");
        }
    }
    catch (Exception ex)
    {
        if (ex is ArgumentException)
        {
            Response.Write("<script>alert('Unable to find an order or job with that order / PO Number.  Please verify the order number being entered is correct.  If so, please send an email to HelpDesk@visionsfirst.com with the order number and state that it is not available in the Insight Portal.'); location.href='ordersearch.aspx'</script>");
        }
        else
        {
            throw;
        }
    }
}

已知信息

  • 数据库运行正常,新订单可正常入库
  • 点击搜索按钮时,预期会重新从数据库拉取数据,但OrderStatus始终显示旧值
  • 已排查常规数据绑定问题,了解!IsPostBack的用法,但本次操作是按钮触发的PostBack,应该会重新查询

可能的原因及解决方法

  1. 数据缓存问题

    • 检查Functions.RetrieveOrdersByPO方法是否使用了缓存(比如MemoryCache、静态变量缓存查询结果)。如果方法内部对查询结果做了缓存,会导致更新后的数据无法及时获取。
    • 解决:修改RetrieveOrdersByPO方法,移除不必要的缓存逻辑,或者在更新数据库后清除对应缓存项。
  2. 实体类属性映射错误

    • 确认Order类中的OrderHeader.OrderStatus属性是否正确映射到数据库字段。如果属性名称或映射关系有误,会导致查询时无法获取最新的OrderStatus值。
    • 解决:检查Order及OrderHeader类的属性定义,确保与数据库字段的映射一致(比如ORM框架的注解、存储过程返回的字段名是否匹配)。
  3. 存储过程逻辑问题

    • 验证RetrieveOrdersByPO调用的存储过程是否确实返回了更新后的OrderStatus值。可以直接在数据库中执行存储过程,传入相同的PO编号,查看返回结果是否包含新的状态。
    • 解决:如果存储过程存在逻辑问题(比如错误的WHERE条件、未正确关联表),修改存储过程确保返回最新的订单数据。
  4. GridView视图状态干扰

    • 虽然你在绑定前设置了DataSource = null并调用DataBind(),但极端情况下视图状态可能仍保留旧值。可以尝试禁用OrderGridView的视图状态,或者在绑定前强制清除视图状态。
    • 解决:在BtnOrderSearch_Click开头添加OrderGridView.EnableViewState = false;,或者调用OrderGridView.ClearState();(注意:禁用视图状态可能影响分页等功能,需测试)。
  5. 数据库事务未提交

    • 确认更新OrderStatus的操作是否已提交事务。如果更新操作处于未提交的事务中,查询时无法读取到未提交的数据。
    • 解决:检查更新OrderStatus的代码,确保事务已正确提交。

内容的提问来源于stack exchange,提问作者kDubya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 22:55:39