Probleme mit UpdateProgress
Ich habe eine Taste auf meiner ASP.NET Seite, die ruft einige Daten aus meiner Datenbank und zeigt Sie auf einer gridview.
Dieser Prozess dauert eine Weile, also dachte ich, ich werde fügen Sie ein updateprogress AJAX control. Wenn ich nun auf die Schaltfläche, die updateprogress Bild erscheint und die Daten werden abgerufen, aus meiner Datenbank erfolgreich (ich habe diesen von manchen logs, dass ich in meiner DB). Aber es gibt 2 Probleme:
(1) Die updateprogress Bild zeigt nur 2 Minuten. Aber meine buttonclick-Ereignis dauert etwa 5 Minuten. Im Grunde das updateprogress-Haltestellen zeigen, noch bevor ich die Aufgabe abgeschlossen ist, die Niederlagen der Zweck.
(2) GridView-Steuerelement wird nicht angezeigt. Es zeigt sich richtig, wenn ich nicht verwenden, scriptmanager/AJAX.
Irgendwelche Ideen?
Einige relevante code-snippets:
<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 Teil:
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();
}
- Bitte zeig uns etwas code.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als pro Ausgabe (1) es ist höchstwahrscheinlich ajax-Timeout. Standard-timeout auf 90 Sekunden. Zu erhöhen, die Nutzung ScriptManager ist AsyncPostBackTimeout Eigenschaft:
Wenn ajax-Aufruf Timeout, Steuerelemente auf der Seite funktioniert möglicherweise nicht richtig, so dass die Erhöhung timeout problem lösen (2) sowie.
Vielleicht möchten Sie diese: http://www.codeproject.com/kb/Ajax/ModalUpdateProgress.aspx
Es funktioniert gut für mich, auch bei längeren Operationen.
Hatte ich genau dieselben Probleme mit ASP.NET UpdateProgress. Ich habe es behoben durch den Umgang mit Skript-manager-Ereignisse direkt:
Scheint, wie Ihr raster ist außerhalb des Update-Panels, wenn Sie ein update angezeigt und Sie können Taste wird innerhalb der update-panel und grid ist außerhalb des update-Panels in diesem Fall alles passieren wird auf server-Seite, aber Sie finden nicht alle änderungen in der Benutzeroberfläche.
Versuchen, um Ihr Netz innerhalb der update-panel.
Bewegen Sie den UpdateProgress außerhalb des UpdatePanel.