- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的 ASP.NET 页面上有一个按钮,它从我的数据库中获取一些数据并将其显示在 GridView 上。
这个过程需要一段时间,所以我想我会添加一个 updateprogress AJAX 控件。现在,当我单击该按钮时,将显示 updateprogress 图像,并且已成功从我的数据库中获取数据(我从我的数据库中的一些日志中检查了这一点)。但是有两个问题:
(1) updateprogress 图像仅显示约 2 分钟。但是我的 buttonclick 事件大约需要 5 分钟才能完成。基本上,更新进度甚至在我的任务完成之前就停止显示,这违背了它的目的。
(2) GridView 不显示。如果我不使用 scriptmanager/AJAX,它会正确显示。
有什么想法吗?
一些相关的代码片段:
<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>
代码文件部分:
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();
}
最佳答案
根据问题 (1),很可能是 ajax 超时。默认超时为 90 秒。要增加使用 ScriptManager 的 AsyncPostBackTimeout 属性:
<asp:ScriptManager ID="ScriptManager1" runat="server" AsyncPostBackTimeout="400">
</asp:ScriptManager>
如果 ajax 调用超时,页面上的控件可能无法正常工作,因此增加超时也可能解决问题 (2)。
关于c# - 使用 UpdateProgress 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3318213/
我有一个 UpdateProgress 控件,它显示为更新面板的所有异步事件的覆盖层(使用 CSS)。现在,对于某些 EXPAND/COLLAPSE 行命令事件,我只是不想显示更新进度。 有办法吗?
我已经检查了这个解决方案:Is there a way to disable UpdateProgress for certain async postbacks? 但这会完全禁止我的控件加载! 我的
我试图在加载网格时在我的 GridView 顶部显示一个 div。 这是我放置 UpdateProgress、UpdatePanel 和 GridView 的方式:
我正在尝试使用更新面板内的 asp.net 文件上传控件上传图像文件。我想处理 UpdateProgress 以显示指示进度的进度条图像以及文件上传。 案例 1: 当我删除触发器部分并使用 Updat
我正在尝试禁用页面元素并在我的应用程序中显示更新进度控件。为了让它工作,我应用了带有属性的样式表 过滤器:alpha(不透明度=85); 但它显示错误“filter is not a known CS
我正在尝试将 UpdateProgress 与触发器一起使用(请参阅下面的代码)但是当单击分配为 asyncPostBackTrigger 的按钮时,UpdateProgress 不起作用。如果我删除
我有一个带有 ListView 的 ASP.NET 应用程序。我从 Active Directory 获取数据,现在如果 ListVew 正在构建,我需要一个等待符号。我想我会使用 Ajax 控件工具
我的 ASP.NET 页面上有一个按钮,它从我的数据库中获取一些数据并将其显示在 GridView 上。 这个过程需要一段时间,所以我想我会添加一个 updateprogress AJAX 控件。现在
我正在使用 Ajax UpdateProgress 控件。虽然它按我预期的那样工作,但我希望它出现在页面的中心。我怎么做
我的 UpdateProgress 在 UpdatePanel 之外,我已经尝试了以下方法 添加了 JavaScript,在母版页中添加了“AsyncPostBackTimeout=3600” 在 P
当您设置或更新 progressView 的 float 时,它会自动更新 progressView 吗? 比如调用一个方法: - (void) updateProgress:(float)progr
我正在创建一个 ASPP.Net 网页。因为它必须加载大量的日期,最多可能需要 60 秒,所以我想通知用户这可能需要一段时间。我想将整个屏幕调暗一点并写上“正在加载,请稍等”。为此,我在 中创建了一
我有一个订单输入页面可能需要一些时间来处理,用户认为浏览器已卡住并关闭它。这是一个弹出式浏览器,当单击 cmdAdd 按钮时,文本框中的项目被写入数据库,子窗口关闭,父窗口刷新以查看更改。这目前工作正
我在 Asp.net 中使用更新面板。我有更新进度,为此我设置了一个 DIV 并为其设置了一个 CSS。问题是当我调用它时,它会显示进度条,但我可以滚动窗口。我需要将其设置为模式(显示进度条时无法选择
这只是一个测试页面,所以我可以看到工作指示器的样子,但是该死的 UpdateProgress 根本没有显示... 测试只是构建一个对象列表并填充列表框,而列表框中的项目少于 100 个。
每当我的更新面板执行 Ajax 操作时,我都会尝试显示更新进度加载图像。我环顾四周,看起来很简单,但我没有运气。这几乎是我所拥有的......
我有一个使用 ASP.NET 开发的网站。那里发生了很多 ajax 请求。所以我想在发生ajax请求时显示图像并在加载数据后隐藏图像。现在一切正常, 这是我到目前为止所做的
我在下面有这个简单的代码,它在 updateProgress 期间更新 TextArea: textArea = new TextArea(); textArea.setEditable(false)
问题:为什么我的 UpdateProgress 在初始页面加载期间不显示,但在通过按钮单击进行的后续回发中显示? 我成功实现此功能的唯一方法是使用计时器,但我并不热衷于计时器。还有别的办法吗? 有人可
我是一名优秀的程序员,十分优秀!