Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
778 connectés 

  FORUM HardWare.fr
  Programmation
  ASP

  ASP.NET Lancer tache asynchrone pendant refresh d'updatepanel

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

ASP.NET Lancer tache asynchrone pendant refresh d'updatepanel

n°2195533
ledzep2
Posté le 26-06-2013 à 15:47:14  profilanswer
 

Salut à tous,
 
J'ai créé un UserControl.
A l'intérieur j'y ai mis un updatepanel, un bouton et un objectdatasource.
Dans l'updatepanel j'ai mis un timer et une gridview.
Ce que j'aimerais que mon code fasse :
1-l'updatepanel rafraichit la gridview toutes les 2 secondes.
2-Lorsque le bouton est cliqué je voudrais qu'une tache asynchrone soit lancée pendant que la gridview continue de se rafraichir.
 
Voilà mon code :

Code :
  1. <%@ Control Language="VB" AutoEventWireup="false" CodeFile="ctrAM.ascx.vb"
  2. Inherits="App_Controls_ctrAM" %>
  3. <style type="text/css">
  4.     `.hiddencol
  5.     {
  6.         display: none;
  7.      }`
  8. </style>
  9. <asp:ScriptManager ID="ScriptManager1" runat="server">
  10. </asp:ScriptManager>
  11. <asp:UpdatePanel ID="UpdatePanel1" runat="server">
  12. <contenttemplate>
  13. <asp:Timer ID="Timer1" runat="server"  Interval="2000" OnTick="Timer1_Tick">
  14.     </asp:Timer>
  15.         <asp:GridView ID="ImportProgress" runat="server" AutoGenerateColumns="False"
  16.             Width="530px" Height="50px" CellPadding="3" Font-Size="X-Small"
  17.             Font-Names="Arial" BorderColor="White" PagerStyle-Mode="NumericPages"
  18.         DataSourceID="ObjectDataSource1">
  19.             <Columns>
  20.                 <asp:BoundField DataField="TAPL_L" HeaderText="Process" ItemStyle-Width="200px">
  21.                 </asp:BoundField>
  22.                 <asp:BoundField DataField="TAPL_D" HeaderText="Description"  ItemStyle-Width="300">
  23.                 </asp:BoundField>
  24.                 <asp:BoundField DataField="TAPL_ExecutionOrder" HeaderText="Exec"  ItemStyle-Width="5px">
  25.                 </asp:BoundField>
  26.                 <asp:TemplateField HeaderText="Progress" ItemStyle-Width="25px">
  27.                     <ItemTemplate>
  28.                         <img src='<%# GetIconImagePath(container.dataItem("TAPS_S" )) %>' width=20 />
  29.                     </ItemTemplate>
  30.                 </asp:TemplateField>
  31.                 <asp:BoundField HeaderText="hdnProgress" DataField="TAPS_S" ItemStyle-CssClass="hiddencol" HeaderStyle-CssClass="hiddencol" >
  32.                 </asp:BoundField>
  33.             </Columns>
  34.             <headerstyle font-bold="True" forecolor="White" backcolor="#D7B191">        </headerstyle>
  35.             <pagerstyle font-bold="True" horizontalalign="Right" forecolor="White" backcolor="#D7B191">
  36.         </pagerstyle>
  37.         </asp:GridView>
  38.         </contenttemplate>
  39. </asp:UpdatePanel>
  40. <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="Select"
  41. TypeName="clsTAPS">
  42. <SelectParameters>
  43.     <asp:Parameter Name="sSessionId" Type="String" DefaultValue="a11" />
  44. </SelectParameters>   
  45. </asp:ObjectDataSource>
  46. <asp:Button ID="Button1" runat="server" Text="Button" autopostback="true" />


 
Et la partie VB :
 

Code :
  1. Imports System.Data
  2. Imports System.Data.SqlClient
  3. Imports System.Data.SqlTypes
  4. Imports System.Threading
  5. Imports System.Globalization
  6. Partial Class App_Controls_ctrAM
  7. Inherits System.Web.UI.UserControl
  8. Sub Page_Load(Sender As Object, E As EventArgs) Handles Me.Load
  9.     If Not Page.IsPostBack Then
  10.     Else
  11.         ImportProgress.DataBind()
  12.     End If
  13. End Sub
  14. Function GetIconImagePath(ByVal strProgress As String) As String
  15.     Select Case Trim(strProgress)
  16.         Case "Unstarted"
  17.             Return "../../images/Imports/unstarted.png"
  18.     End Select
  19. End Function
  20. Function LoadDataValidations(ByVal sSessionId As String)
  21.     Dim oAsyncTask As New clsImportAsync()
  22.     oAsyncTask.sTAPS_SessionId = sSessionId
  23.     Dim asyncTask As New PageAsyncTask(AddressOf oAsyncTask.OnBegin, AddressOf oAsyncTask.OnEnd, AddressOf oAsyncTask.OnTimeout, "AsyncTask", True)
  24.     ' Register the asynchronous task.
  25.     Page.RegisterAsyncTask(asyncTask)
  26.     ' Execute the register asynchronous task.
  27.     Page.ExecuteRegisteredAsyncTasks()
  28.     ' Display the results of the export
  29.     ShowResults()
  30. End Function
  31. Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
  32.     Label1.Text = "Panel refreshed at: " + DateTime.Now.ToLongTimeString()
  33.     Try
  34.         ImportProgress.DataBind()
  35.         Next
  36.     Catch ex As Exception
  37.         Label1.Text = "==" + ex.ToString
  38.     End Try
  39. End Sub
  40. Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
  41.         LoadDataValidations(hndAPSessionID.Text)
  42. End Sub
  43. End Class


 
Mon problème :
 
Dès que je clique sur le bouton la page freeze.
Comme si le timer était bloqué.
Tout reprend lorsque la tache asynchrone est terminée et alors la gridview se rafraichit.
J'ai essayé avec un second updatepanel (contenant le bouton), avec un timer javascript ça ne fonctionne jamais.
Que fais je de mal ?
Merci de votre aide.

mood
Publicité
Posté le 26-06-2013 à 15:47:14  profilanswer
 

n°2195612
x1fr
Posté le 27-06-2013 à 10:38:31  profilanswer
 

Ce qui se passe, je pense, c'est que ton bouton se comporte comme un formulaire classique, c'est à dire que quand tu clic dessus, c'est la page tout entière qui est rechargée.
 
Une solution serait peut-être de passer par l'updatepanel. Essaye dans un premier temps de simplement déplacer ton bouton à l'intérieur de l'updatepanel.
 
Si ca fonctionne et que tu veux garder le bouton à l'extérieur du panel, il y a une config un peu spécifique à mettre en place. De mémoire, passer le champ UpdateMode de l'UpdatePanel à Conditionnal, et ajouter les évènements (triggers) qui vont s'effectuer en asynchrone à la main (le tick du timer et le clic du bouton à priori)


---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
n°2196079
ledzep2
Posté le 01-07-2013 à 10:36:01  profilanswer
 

Merci pour cette réponse x1fr.
J'ai placé mon button à cet endroit :
 

Code :
  1. </pagerstyle>
  2.             </asp:GridView>
  3.               <asp:Button ID="Button1" runat="server" Text="Button" />
  4.             </contenttemplate>
  5. </asp:UpdatePanel>


 
J'ai enlevé l'attribut autopostback.
 
Ce qu'il se passe maintenant :
-au chargement de la page il y a bien une réactualisation toutes les deux secondes de ma gridview
-quand je clique sur le bouton, le compteur se frise
-au bout d'un certain temps (je suppose la durée de la tache lancée par le bouton) la gridview se met à jour et le timer est bloqué, il ne tick plus.

n°2196357
ledzep2
Posté le 03-07-2013 à 12:16:49  profilanswer
 

Non ça ne vous dit rien ?

n°2196444
x1fr
Posté le 03-07-2013 à 18:06:07  profilanswer
 

Nan désolé, j'ai manipulé des updatepanels il y a quelques temps et j'avais eu des soucis aussi avec les évenements qui déclenchent les appels asynchrones un peu comme ça, maintenant que le bouton est dans le panel, je ne vois pas trop pourquoi le timer s'arrete


---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
n°2199123
ledzep2
Posté le 31-07-2013 à 10:47:37  profilanswer
 

Bon merci quand même...
Si quelqu'un d'autre a une idée...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  ASP

  ASP.NET Lancer tache asynchrone pendant refresh d'updatepanel

 

Sujets relatifs
[VB.NET] Récuperer une info d'un paquet[C# URGENT] lancer un exe avec un compte et un pwd ecrit dans le code
[Powershell] lancer une machine virtuelle automatiquementLancer deux fois le même .exe
Nom de l'exécutable [VB.Net]Script d'automatisation de tache
Net::Telnet pour switch LinksysChoix d'un langage pour une tache précise
Utilisation de Net::Telnet pour se connecter aux switch HPLancer invite de commande en VBA
Plus de sujets relatifs à : ASP.NET Lancer tache asynchrone pendant refresh d'updatepanel


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR