【问题标题】:Refresh gridview data with response redirect使用响应重定向刷新 gridview 数据
【发布时间】:2017-08-18 04:34:51
【问题描述】:

网格视图下方的打印按钮在新选项卡中打开打印页面。

使用这个 java 脚本代码。

Java 脚本

<script type="text/javascript">
    function SetTarget() {
        document.forms[0].target = "_blank";
    }    
</script>

打印按钮也将OrderStatus从“待处理”更新为“已接收”

问题是当我按下网格数据中的打印按钮时,我必须重新加载页面才能看到 OrderStatus 已更改为更新后的值。

代码后面

protected void gridOrders_RowCommand(object sender, GridViewCommandEventArgs e)
{
    try
    {
        string commandName = e.CommandName.ToString().Trim();
        GridViewRow row = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
        GridViewRow gvRow = (GridViewRow)((Control)e.CommandSource).NamingContainer;
        Int32 rowind = gvRow.RowIndex;
        string orderid = row.Cells[1].Text;

        switch (commandName)
        {

            case "Print":
                if (r.CheckReceiving(orderid))
                {

                Session["orderid"] = orderid;
                Server.Transfer("OrderPrint.aspx"); 

                }

                else
                {
                    string msg = r.AddReceiving(r.GetNextReceivingID(), orderid, DateTime.Now.ToString());
                    if (msg == "true")
                    {
                        o.UpdateOrderStatus(orderid, "Received");
                        gridOrders.DataSource = o.ManageOrders(UtilityClass.ReadFromCookie("login", "OutletD", Request));
                        gridOrders.DataBind();
                        Session["orderid"] = orderid;
                        Server.Transfer("OrderPrint.aspx"); 
                    }

                    else
                    {
                        divreceivedfalse.Visible = true;

                    }
                }


                break;

            default: break;

        }
    }
    catch (Exception ex)
    {
        Response.Write("Error: " + ex.Message);

    }
}

网格位于更新面板中

<asp:GridView ID="gridOrders" OnRowDataBound="gridOrders_RowDataBound" OnRowCommand="gridOrders_RowCommand" runat="server" CssClass="table table-bordered  text-nowrap" AutoGenerateColumns="False">
<Columns>
    <asp:TemplateField HeaderText="Print" ShowHeader="False">
        <ItemTemplate>
            <asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="SetTarget('_blank');" CommandName="Print" CausesValidation="False" CssClass="btn btn-primary btn-xs" Text=""><i class="glyphicon glyphicon-print"></i></asp:LinkButton>
        </ItemTemplate>
        <ControlStyle CssClass="btn btn-default " />
    </asp:TemplateField>
    <asp:BoundField DataField="OrderID" HeaderText="Order #" SortExpression="OrderID" />
    <asp:BoundField DataField="OrderDate" DataFormatString="{0:dd/MMM/yyyy hh:mm tt}" HeaderText="Order Date" SortExpression="OrderDate" />
    <asp:TemplateField HeaderText="Status" SortExpression="Status">
        <ItemTemplate>
            <asp:Label ID="lblStatus" CssClass="label label-primary" runat="server" Text='<%# Bind("OrderStatus") %>'> CausesValidation="False" Text=''></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>
</Columns>

【问题讨论】:

    标签: c# asp.net ajax gridview asp.net-ajax


    【解决方案1】:

    在您的情况下,更新面板无法理解要更新的数据发生了变化。因此,您需要手动更新它。你可以通过调用来做到这一点

    UpdatePanelName.Update();
    

    在这样的适当位置:

    if (msg == "true")
    {
        o.UpdateOrderStatus(orderid, "Received");
        gridOrders.DataSource = o.ManageOrders(UtilityClass.ReadFromCookie("login", "OutletD", Request));
        gridOrders.DataBind();
        UpdatePanelName.Update();
        Session["orderid"] = orderid;
        Server.Transfer("OrderPrint.aspx"); 
    }
    

    请注意,您应该将 UpdatePanelName 更改为您自己的更新面板名称。

    【讨论】:

    • 我还是有这个问题
    • 不更新的是你的标签绑定到OrderStatus
    • 但不仅标签所有网格数据
    • 请检查另外两件事。 (1) 有很多ifs 检查Update() 是否通过放置断点被调用。 (2) 将此列设为普通的BoundField,看看问题是否出自TemplateField内部有绑定。
    猜你喜欢
    • 2013-07-22
    • 2011-09-29
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多