none
ASP.Net : Exécution Asynchrone

    Question

  • Bonjour

    Je souhaiterais exécuter une méthode de manière asynchrone et afficher : "Veuillez patienter..." dans un label

    J'ai procédé comme ci-dessous mais l'exécution semble synchrone (le veuillez patienter n'apparait jamais...).

    PB est un Button, gr une GridView, lab est un Label

     Private _ds As DataSet
        Private _dlgt As AsyncTaskDelegate
        Delegate Function AsyncTaskDelegate() As Boolean
        Protected Sub PB_Click(sender As Object, e As System.EventArgs) Handles PB.Click
            gr.Visible = False : Lab.Text = "Veuillez Patienter ..." : Lab.ForeColor = Drawing.Color.AliceBlue
            Dim tsk As PageAsyncTask = New PageAsyncTask(New BeginEventHandler(AddressOf BeginAsyncTask), New EndEventHandler(AddressOf EndAsyncTask), New EndEventHandler(AddressOf TimeoutAsyncTask), Nothing)
            Page.RegisterAsyncTask(tsk)
        End Sub
        Public Function InitGR() As Boolean
            Try
                Dim lstLangue As New List(Of String)
                For Each l As ListItem In ChkLangues.Items
                    If l.Selected Then
                        lstLangue.Add("Libelle_" & l.Value.Trim)
                    End If
                Next
                _ds = Acc.GetLstLibelle_Traduit(CBLibelle.SelectedValue, "Libelle_" & CBLangue.SelectedValue.Trim, TB.Text, lstLangue)
                Return True
            Catch ex As Exception
                Return False
            End Try
        End Function
        Private Function BeginAsyncTask(sender As Object, e As EventArgs, cb As AsyncCallback, state As Object) As IAsyncResult
            Try
                gr.Visible = False
                Dim lstLangue As New List(Of String)
                For Each l As ListItem In ChkLangues.Items
                    If l.Selected Then
                        lstLangue.Add("Libelle_" & l.Value.Trim)
                    End If
                Next
                _dlgt = New AsyncTaskDelegate(AddressOf InitGR)
                Return _dlgt.BeginInvoke(cb, state)
            Finally
            End Try
        End Function
        Private Sub EndAsyncTask(ia As IAsyncResult)
            If _ds.Tables(0).Rows.Count = 0 Then
                Lab.Text = "Aucun enregistrement !" : Lab.ForeColor = Drawing.Color.Red
            Else
                gr.DataSource = _ds
                gr.Visible = True
                gr.DataBind()
                Lab.Text = _ds.Tables(0).Rows.Count.ToString & " Enregistrement(s) Trouvé(s)" : Lab.ForeColor = Drawing.Color.Black
            End If
            _dlgt.EndInvoke(ia)
        End Sub
        Private Sub TimeoutAsyncTask()
            Throw New NotImplementedException
        End Sub


    FB


    mardi 2 avril 2013 14:17

Réponses

Toutes les réponses

  • Je vais essayer mais j'avoue que j'ai occulté l'AJAX

    Purement subjectif, mais je le trouve trop complexe...


    FB

    jeudi 4 avril 2013 06:39
  • C'est définitif, je ne comprends pas la logique AJAX...

    J'ai le même résultat avec l'UpdatePanel...

    <%@ Page Language="VB" CodeFile="ChercheLibelleNew.aspx.vb" Inherits="ChercheLibelleNew" Async="true" AsyncTimeout="240" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System" %>
    <%@ Import Namespace="System.Collections.Generic" %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    
    <script runat="server">
        Protected Sub PB_Click(sender As Object, e As System.EventArgs) 'Handles PB.Click
            gr.Visible = False : Lab.Text = "Veuillez Patienter ..." : Lab.ForeColor = System.Drawing.Color.AliceBlue
        
            Try
                Dim _ds As DataSet
    
                Dim lstLangue As New List(Of String)
                For Each l As ListItem In ChkLangues.Items
                    If l.Selected Then
                        lstLangue.Add("Libelle_" & l.Value.Trim)
                    End If
                Next
    
                _ds = Acc.GetLstLibelle_Traduit(CBLibelle.SelectedValue, "Libelle_" & CBLangue.SelectedValue.Trim, TB.Text, lstLangue)
    
                If _ds.Tables(0).Rows.Count = 0 Then
                    Lab.Text = "Aucun enregistrement !" : Lab.ForeColor = Drawing.Color.Red
                Else
                    gr.DataSource = _ds
                    gr.Visible = True
                    gr.DataBind()
                    Lab.Text = _ds.Tables(0).Rows.Count.ToString & " Enregistrement(s) Trouvé(s)" : Lab.ForeColor = Drawing.Color.Black
                End If
            Catch ex As Exception
    
            End Try
    
        End Sub
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title>Grange Meuble de famille : Chercher</title>
        <link id="Applixia_CSS1" runat="server" rel="stylesheet" type="text/css"  /> 
        <link id="Applixia_CSS2" runat="server" rel="stylesheet" type="text/css" />  
    <link rel="stylesheet" type="text/css" href="css/CatWebIFrame.css"/>
    <script type="text/javascript" src="Script/Commun.js"> </script>
    
    </head>
    <body>
        <form id="form1" runat="server">
    
            <div class="separator">
            </div>
            
                 <asp:ScriptManager ID="ScriptManager1" runat="server">
                 </asp:ScriptManager>
                
            <h1>Recherche de libellés</h1>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
            <div class="text-bloc">
             <table>
     
             <tr>
             <td> Langues affichées </td> <td><asp:CheckBoxList ID="ChkLangues" runat="server"/></td> <td></td><td></td>
             </tr>
             <tr>
             <td> Type de recherche </td> <td><asp:DropDownList ID="CBLibelle" runat="server" /></td> <td>Langue d'origine </td> <td>  <asp:DropDownList ID="CBLangue" runat="server" /></td>
             </tr>
             <tr>
             <td> Entrer la valeur cherchée </td> <td><asp:TextBox ID="TB" runat="server"/></td> <td> <asp:Button ID="PB" Text="Lancer" runat="server" OnClick="PB_Click"  /> </td> <td><asp:Button ID="PBExport" Text="Export EXCEL" runat="server"  /></td>
             </tr>
    
             <tr>
             <td> <asp:Label ID="Lab" runat="server"  /> </td> <td></td>
             </tr>
    
             </table>
    
                <asp:GridView ID="gr" runat="server" CellPadding="4" visible="false" AutoGenerateColumns="true"
                    ForeColor="#333333" GridLines="None"  >
                    <AlternatingRowStyle BackColor="White"  />
                    <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                    <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                    <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
                    <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
                    <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
                    <SortedAscendingCellStyle BackColor="#FDF5AC" />
                    <SortedAscendingHeaderStyle BackColor="#4D0000" />
                    <SortedDescendingCellStyle BackColor="#FCF6C0" />
                    <SortedDescendingHeaderStyle BackColor="#820000" />
                </asp:GridView>
            </div>
            </ContentTemplate>
            </asp:UpdatePanel>
        </form>
    </body>
    </html>
    


    FB

    jeudi 4 avril 2013 07:43
  • En effet, il y a du progrès :)

    Par contre, je n'arrive pas à interagir avec les controls en dehors de l'UpdateProgress?

    Dans mon cas, j'aimerai , sur le clic du bouton PB, vider le label Lab et cacher la GridView.

    J'ai mis du code sur l'init de l'UpdateProgress : en vain...

    <%@ Page Language="VB" CodeFile="ChercheLibelleNew.aspx.vb" Inherits="ChercheLibelleNew" Async="true" AsyncTimeout="240" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System" %>
    <%@ Import Namespace="System.Collections.Generic" %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    
    <script runat="server">
        Protected Sub PB_Click(sender As Object, e As System.EventArgs) 'Handles PB.Click
        
            Try
                Dim _ds As DataSet
    
                Dim lstLangue As New List(Of String)
                For Each l As ListItem In ChkLangues.Items
                    If l.Selected Then
                        lstLangue.Add("Libelle_" & l.Value.Trim)
                    End If
                Next
    
                _ds = Acc.GetLstLibelle_Traduit(CBLibelle.SelectedValue, "Libelle_" & CBLangue.SelectedValue.Trim, TB.Text, lstLangue)
    
                If _ds.Tables(0).Rows.Count = 0 Then
                    Lab.Text = "Aucun enregistrement !" : Lab.ForeColor = Drawing.Color.Red
                Else
                    gr.DataSource = _ds
                    gr.Visible = True
                    gr.DataBind()
                    Lab.Text = _ds.Tables(0).Rows.Count.ToString & " Enregistrement(s) Trouvé(s)" : Lab.ForeColor = Drawing.Color.Black
                End If
            Catch ex As Exception
    
            End Try
    
        End Sub
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title>Grange Meuble de famille : Chercher</title>
        <link id="Applixia_CSS1" runat="server" rel="stylesheet" type="text/css"  /> 
        <link id="Applixia_CSS2" runat="server" rel="stylesheet" type="text/css" />  
    <link rel="stylesheet" type="text/css" href="css/CatWebIFrame.css"/>
    <script type="text/javascript" src="Script/Commun.js"> </script>
    
    </head>
    <body>
        <form id="form1" runat="server">
    
            <div class="separator">
            </div>
            
                 <asp:ScriptManager ID="ScriptManager1" runat="server">
                 </asp:ScriptManager>
                
            <h1>Recherche de libellés</h1>
            <asp:UpdatePanel ID="Upd" runat="server">
            <ContentTemplate>
            <div class="text-bloc">
             <table>
     
             <tr>
             <td> Langues affichées </td> <td><asp:CheckBoxList ID="ChkLangues" runat="server"/></td> <td></td><td></td>
             </tr>
             <tr>
             <td> Type de recherche </td> <td><asp:DropDownList ID="CBLibelle" runat="server" /></td> <td>Langue d'origine </td> <td>  <asp:DropDownList ID="CBLangue" runat="server" /></td>
             </tr>
             <tr>
             <td> Entrer la valeur cherchée </td> <td><asp:TextBox ID="TB" runat="server"/></td> <td> <asp:Button ID="PB" Text="Lancer" runat="server" OnClick="PB_Click"  /> </td> <td><asp:Button ID="PBExport" Text="Export EXCEL" runat="server"  /></td>
             </tr>
    
             <tr>
             <td>  
             <asp:Label ID="Lab" runat="server"  />
             <asp:UpdateProgress ID="UpdPs" runat="server" AssociatedUpdatePanelID= "Upd"  >
             <ProgressTemplate  >
                <div class="CenterPB" >
                Veuillez patienter ....<img src="images/updateProgress.gif" />
                </div>
             </ProgressTemplate>
             </asp:UpdateProgress> </td> <td></td>
             </tr>
             </table>
                
    
                <asp:GridView ID="gr" runat="server" CellPadding="4" visible="false" AutoGenerateColumns="true"
                    ForeColor="#333333" GridLines="None"  >
                    <AlternatingRowStyle BackColor="White"  />
                    <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                    <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                    <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
                    <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
                    <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
                    <SortedAscendingCellStyle BackColor="#FDF5AC" />
                    <SortedAscendingHeaderStyle BackColor="#4D0000" />
                    <SortedDescendingCellStyle BackColor="#FCF6C0" />
                    <SortedDescendingHeaderStyle BackColor="#820000" />
                </asp:GridView>
            </div>
            </ContentTemplate>
            </asp:UpdatePanel>
        </form>
    </body>
    </html>
    


    FB

    jeudi 4 avril 2013 11:40
  • Bonjour

    Pour cacher le DataGridView le mieux c'est de utiliser la classe CSS CenterPB pour que le DIV remplis l'écran ou utiliser un JavaScript pour cacher un <div> qui contient le table.

    Toujours JavaScript pour vider le label Lab.

    Cordialement,


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.



    jeudi 4 avril 2013 12:14
    Propriétaire
  • Excusez moi Aurel

    Alors, J'ai en effet réussi à gérer les objets comme vous m'avez expliqué ci-dessus.

    Ce qui m'avait perturbé c'est l'impossibilité de faire en jsp, un getelementbyid sur un GridView.

    Merci


    FB


    lundi 8 avril 2013 12:27