Problèmes à l'aide de UpdateProgress
J'ai un bouton sur mon ASP.NET page, qui extrait des données à partir de ma base de données et les affiche sur un gridview.
Ce processus prend un certain temps, donc je pense que je vais ajouter un updateprogress de contrôle AJAX. Maintenant quand je clique sur le bouton, le updateprogress image s'affiche et les données sont récupérées à partir de ma base de données avec succès (j'ai vérifié cette de certains journaux que j'ai dans ma DB). Mais il y a 2 problèmes:
(1) Le updateprogress image montre que pendant environ 2 minutes. Mais mon buttonclick événement prend environ 5 minutes. Fondamentalement, la updateprogress cesse de montrer avant même ma tâche est terminée, qui va à l'encontre de son but.
(2) GridView ne s'affiche pas. Il s'affiche correctement si je n'utilise pas scriptmanager/AJAX.
Des idées?
Quelques extraits de code:
<div style="position: absolute; top: 300px; left: 19px; width: 568px; height: 48px;">
<table>
<tr>
<td>
<asp:Button ID="btnGenerateReport" runat="server" Height="37px" Text="Generate Report"
Width="132px" onclick="btnGenerateReport_Click" />
</td>
<td class="style5">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel runat="server" id="Panel">
<ContentTemplate>
<asp:UpdateProgress ID="PageUpdateProgress" runat="server">
<ProgressTemplate>
<img runat="server" src="updateprogress.gif"
style="position: static; width: 32px;"> </img></ProgressTemplate>
</asp:UpdateProgress>
<div style="position: absolute; top: 423px; left: 9px; width: 795px; height: 984px;">
<asp:GridView ID="Report" runat="server"
AllowSorting="True" AutoGenerateColumns="False"
Height="622px" BorderStyle="Solid"
Width="779px" PageSize="100" HorizontalAlign="Center">
<Columns>
<asp:BoundField HeaderText="AccountId" DataField="AccountId">
<ControlStyle BorderStyle="Solid" Width="20px" />
</asp:BoundField>
<asp:BoundField HeaderText="User Name" ReadOnly="True" DataField="UserName">
<ControlStyle Width="50px" />
</asp:BoundField>
<asp:BoundField HeaderText="C2" ReadOnly="True"
DataField="C2">
<ControlStyle BorderStyle="Solid" Width="20px" />
</asp:BoundField>
<asp:BoundField HeaderText="C1" ReadOnly="True"
DataField="C1">
<ControlStyle BorderStyle="Solid" Width="20px" />
</asp:BoundField>
</Columns>
</asp:GridView>
</div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnGenerateReport" EventName="click" />
</Triggers>
</asp:UpdatePanel>
</td>
<td>
<asp:Button ID="btnExportToExcel" runat="server" Text="Export To Excel"
Height="37px" Width="132px" onclick="btnExportToExcel_Click" />
</td>
</tr>
</table>
</div>
Codefile partie:
protected void btnGenerateReport_Click(object sender, EventArgs e)
{
FetchAccounts();
long startId = FetchAuditData();
AggregateAuditData(startId);
dsAnalysisReport = GenerateDataSet();
if (dsAnalysisReport == null || dsAnalysisReport.Tables.Count == 0)
lblErrorText.Text = "No Data Found for the input information";
else
BindData(dsAnalysisReport);
}
public void FetchAccounts()
{
using (var sqlConnection = new SqlConnection(ConnectionString))
{
sqlConnection.Open();
cmdstring = @"[spo_FetchAccounts]";
cmd = new SqlCommand(cmdstring, sqlConnection) { CommandType = CommandType.StoredProcedure };
cmd.CommandTimeout = 100000;
cmd.Parameters.Add("@MaxActivationDate", SqlDbType.DateTime);
cmd.Parameters["@MaxActivationDate"].Value =
DateTime.Parse(txtStartDate.Text) - new TimeSpan(1, 0, 0, 0);
cmd.ExecuteNonQuery();
sqlConnection.Close();
}
}
public long FetchAuditData()
{
using (var sqlConnection = new SqlConnection(ConnectionString))
{
sqlConnection.Open();
cmdstring = @"[spo_GetComparisonData]";
cmd = new SqlCommand(cmdstring, sqlConnection) { CommandType = CommandType.StoredProcedure };
cmd.CommandTimeout = 100000;
cmd.Parameters.Add("@StartDate", SqlDbType.DateTime);
cmd.Parameters["@StartDate"].Value = txtStartDate.Text;
cmd.Parameters.Add("@EndDate", SqlDbType.DateTime);
cmd.Parameters["@EndDate"].Value = txtEndDate.Text;
SqlParameter returnValue = new SqlParameter("@Return_Value", SqlDbType.BigInt);
returnValue.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(returnValue);
cmd.ExecuteNonQuery();
long startId = long.Parse(cmd.Parameters["@Return_Value"].Value.ToString());
sqlConnection.Close();
return startId;
}
}
private void AggregateAuditData(long startId)
{
using (var sqlConnection = new SqlConnection(ConnectionString))
{
sqlConnection.Open();
cmdstring = @"[spo_ComparisonTable]";
cmd = new SqlCommand(cmdstring, sqlConnection) { CommandType = CommandType.StoredProcedure };
cmd.CommandTimeout = 100000;
cmd.Parameters.Add("@StartId", SqlDbType.Int);
cmd.Parameters["@StartId"].Value = startId;
cmd.ExecuteNonQuery();
sqlConnection.Close();
}
}
public DataSet GenerateDataSet()
{
using (var sqlConnection = new SqlConnection(ConnectionString))
{
sqlConnection.Open();
cmdstring = @"SELECT * FROM XAccounts";
cmd = new SqlCommand(cmdstring, sqlConnection);
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
sqlConnection.Close();
if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
return ds;
return null;
}
}
private void BindData(DataSet ds)
{
BindReportGrid(Report, ds.Tables[0]);
}
private void BindReportGrid(GridView gridToBind, DataTable dataTableToBind)
{
gridToBind.DataSource = dataTableToBind;
gridToBind.DataBind();
}
OriginalL'auteur Hari Menon | 2010-07-23
Vous devez vous connecter pour publier un commentaire.
Que, par question (1) il s'agit probablement de l'ajax d'expirer. Délai d'attente par défaut est de 90 secondes. Augmenter l'utilisation du ScriptManager AsyncPostBackTimeout propriété:
Si l'appel ajax est le moment des contrôles sur la page peut ne pas fonctionner correctement si l'augmentation de délai d'attente pourrait résoudre le problème (2).
Cela a fonctionné pour moi 🙂
a fonctionné pour moi aussi merci bro:)
OriginalL'auteur Maciej
Vous voudrez peut-être ceci: http://www.codeproject.com/kb/Ajax/ModalUpdateProgress.aspx
Il fonctionne bien pour moi, même avec les opérations de longue durée.
OriginalL'auteur Jeroen
J'avais les mêmes problèmes avec ASP.NET UpdateProgress. Je l'ai fixée par la manipulation du gestionnaire de scripts d'événements directement:
OriginalL'auteur Pavel Morshenyuk
Semble que votre grille est à l'extérieur du panneau de mise à Jour, si vous utilisez un panneau de mise à jour et vous bouton est à l'intérieur du panneau de mise à jour et la grille est à l'extérieur du panneau de mise à jour dans ce cas, tout se passera à côté serveur, mais vous ne trouverez pas de changements dans l'INTERFACE utilisateur.
Essayez de placer votre grille à l'intérieur du panneau de mise à jour.
OriginalL'auteur PSK
Déplacer le UpdateProgress à l'extérieur de l'UpdatePanel.
OriginalL'auteur James