2017-03-25 2 views
1

Le bouton Aperçu avant impression dans la grille ci-dessous ouvre la page d'impression dans un nouvel onglet.Actualiser les données GridView avec réponse redirigée

En utilisant ce code java-script.

Java Script

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

également les mises à jour du bouton d'impression OrderStatus de « Dans l'attente » à « reçu »

Le problème est quand j'appuie sur le bouton d'impression dans les données de la grille ne sont pas actualisées i doivent recharger la page pour voir que OrderStatus a été changé à la valeur actualisée.

Derrière Code

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); 

    } 
} 

Grille est à l'intérieur UpdatePanel

<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> 

Répondre

0

Dans votre panneau de mise à jour de cas ne peut pas comprendre qu'il y avait changement de données pour mettre à jour . Par conséquent, vous devez le mettre à jour manuellement. Vous pouvez le faire en appelant

UpdatePanelName.Update(); 

dans un endroit approprié comme celui-ci:

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"); 
} 

Notez que vous devez changer UpdatePanelName avec votre propre nom de panneaux de mise à jour.

+0

i ont encore la question – Ayman

+0

La seule chose qui ne met pas à jour est votre étiquette liée à 'OrderStatus'? – Emad

+0

oui qui est bon – Ayman