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 :
- <%@ Control Language="VB" AutoEventWireup="false" CodeFile="ctrAM.ascx.vb"
- Inherits="App_Controls_ctrAM" %>
- <style type="text/css">
- `.hiddencol
- {
- display: none;
- }`
- </style>
- <asp:ScriptManager ID="ScriptManager1" runat="server">
- </asp:ScriptManager>
- <asp:UpdatePanel ID="UpdatePanel1" runat="server">
- <contenttemplate>
- <asp:Timer ID="Timer1" runat="server" Interval="2000" OnTick="Timer1_Tick">
- </asp:Timer>
- <asp:GridView ID="ImportProgress" runat="server" AutoGenerateColumns="False"
- Width="530px" Height="50px" CellPadding="3" Font-Size="X-Small"
- Font-Names="Arial" BorderColor="White" PagerStyle-Mode="NumericPages"
- DataSourceID="ObjectDataSource1">
- <Columns>
- <asp:BoundField DataField="TAPL_L" HeaderText="Process" ItemStyle-Width="200px">
- </asp:BoundField>
- <asp:BoundField DataField="TAPL_D" HeaderText="Description" ItemStyle-Width="300">
- </asp:BoundField>
- <asp:BoundField DataField="TAPL_ExecutionOrder" HeaderText="Exec" ItemStyle-Width="5px">
- </asp:BoundField>
- <asp:TemplateField HeaderText="Progress" ItemStyle-Width="25px">
- <ItemTemplate>
- <img src='<%# GetIconImagePath(container.dataItem("TAPS_S" )) %>' width=20 />
- </ItemTemplate>
- </asp:TemplateField>
- <asp:BoundField HeaderText="hdnProgress" DataField="TAPS_S" ItemStyle-CssClass="hiddencol" HeaderStyle-CssClass="hiddencol" >
- </asp:BoundField>
- </Columns>
- <headerstyle font-bold="True" forecolor="White" backcolor="#D7B191"> </headerstyle>
- <pagerstyle font-bold="True" horizontalalign="Right" forecolor="White" backcolor="#D7B191">
- </pagerstyle>
- </asp:GridView>
- </contenttemplate>
- </asp:UpdatePanel>
- <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="Select"
- TypeName="clsTAPS">
- <SelectParameters>
- <asp:Parameter Name="sSessionId" Type="String" DefaultValue="a11" />
- </SelectParameters>
- </asp:ObjectDataSource>
- <asp:Button ID="Button1" runat="server" Text="Button" autopostback="true" />
|
Et la partie VB :
Code :
- Imports System.Data
- Imports System.Data.SqlClient
- Imports System.Data.SqlTypes
- Imports System.Threading
- Imports System.Globalization
- Partial Class App_Controls_ctrAM
- Inherits System.Web.UI.UserControl
- Sub Page_Load(Sender As Object, E As EventArgs) Handles Me.Load
- If Not Page.IsPostBack Then
- Else
- ImportProgress.DataBind()
- End If
- End Sub
- Function GetIconImagePath(ByVal strProgress As String) As String
- Select Case Trim(strProgress)
- Case "Unstarted"
- Return "../../images/Imports/unstarted.png"
- End Select
- End Function
- Function LoadDataValidations(ByVal sSessionId As String)
- Dim oAsyncTask As New clsImportAsync()
- oAsyncTask.sTAPS_SessionId = sSessionId
- Dim asyncTask As New PageAsyncTask(AddressOf oAsyncTask.OnBegin, AddressOf oAsyncTask.OnEnd, AddressOf oAsyncTask.OnTimeout, "AsyncTask", True)
- ' Register the asynchronous task.
- Page.RegisterAsyncTask(asyncTask)
- ' Execute the register asynchronous task.
- Page.ExecuteRegisteredAsyncTasks()
- ' Display the results of the export
- ShowResults()
- End Function
- Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
- Label1.Text = "Panel refreshed at: " + DateTime.Now.ToLongTimeString()
- Try
- ImportProgress.DataBind()
- Next
- Catch ex As Exception
- Label1.Text = "==" + ex.ToString
- End Try
- End Sub
- Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
- LoadDataValidations(hndAPSessionID.Text)
- End Sub
- 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.