编辑:
显然,部分问题是虽然 ASP:GridView 有一个 OnDataBound() 事件(您可以在代码隐藏中使用它),但生成的相应 HTML 表没有,因此您可以将该事件附加到 JavaScript。 (我做对了吗?)所以,这就是为什么我在这个问题上遇到麻烦的原因。回到绘图板。
我是一名桌面开发人员(带有 VB.NET 的 WinForms),正在过渡到 ASP.NET 开发。我的思绪真的围绕着 DOM、JavaScript 和 session 状态以及所有与 Web 开发相关的东西。我并不傻,我做过研究(包括观看数小时的视频和阅读数百页的“ASP.NET 简介”),但我总是在看似相当简单的问题上碰壁。
基本上,我目前的情况可以总结如下:
- 我有一个页面运行一个由用户启动的很长的过程。
- 这个漫长的过程最多可能需要几分钟,所以我想向用户表明正在发生一些事情。
- 当流程完成后,我要么:
A。要在 GridView 中显示的结果
b.没有可显示的结果 - 如果我有结果要显示,我想显示它们。
- 如果我没有要显示的结果,我想向用户显示一个标签,上面写着“没有要显示的结果”。
什么是工作:
- 我有一个基本页面,用户可以在其中选择开始日期和结束日期并开始检查流程。
- 检查过程运行良好(使用为此程序的桌面版本开发的 LINQ-to-SQL 逻辑)。
- 我的页面上有一个 UpdatePanel,它显示一个标签和一个动画 gif 来指示正在发生的事情。
- 如果我得到结果,它们会适本地显示在我的 GridView 中。
什么不起作用:
我很乐意为用户提供某种进度条,以指示完成时的实际进度,而不是一些无休止的动画 gif,它根本没有什么意义。我可以快速轻松地计算出这个值,但无法弄清楚如何将所述值从服务器传输到网页。
我不知道如何触发标签的“取消隐藏”事件。长时间运行的过程在按钮的单击事件处理程序中,我在其中运行自定义代码并生成一个数据表,然后将其保存为 session 变量,将其指定为 GridView 的数据源并调用 GridView.DataBind()。当我尝试确定 DataTable 的内容并隐藏/显示那里的标签时,似乎什么也没有发生。
问题 #2 是我发布此网站真正需要解决的问题。我假设它涉及一个 JavaScript 解决方案,并且我已经尝试了一些东西,但我发现我真的是在猜测并且没有很好地掌握解决方案应该是什么样子。
这是我想有选择地显示/使其可见的标签:
<tr>
<td colspan="2" align="center">
<h2><asp:Label runat="server" ID="lblNoMissing" Text="No Missing Documentation Found" Visible="false"></asp:Label></h2>
</td>
</tr>
这是我要测试的 JavaScript 函数:
<script type="text/javascript">
function databound() {
var gridViewID = '<%=_gridView1.ClientID%>';
var labelID = '<%=lblNoMissing.ClientID%>';
var gridView = document.getElementById(gridViewID);
if (gridView.rows.length > 0) {
$get(labelID).style.visibility = "false";
} else {
$get(labelID).style.visibility = "true";
}
}
</script>
问题:失败(数据绑定(bind)不是 Default.aspx 的成员):
<asp:GridView ID="_gridView1" runat="server"
AllowSorting="True" AutoGenerateColumns="False" CellPadding="4"
ForeColor="#333333" GridLines="Horizontal" PageSize="20" OnDataBound="databound();">
// Rest of GridView definition removed
</asp:GridView>
我错过了什么?
谢谢!!!!
最佳答案
对于问题 #1,那里有一大堆免费的 Javascript 进度条。至于你无法取回的值(value),试试这个:
<asp:Label ID="ProgressValue" runat="server" visible="false" />
在你的代码后面。
ProgressValue.Text = //Your value from your database.
只需从您的 Javascript 那里引用它。
对于你的第二个问题,你不能只在后面的代码中做(用 C# 编写)
//Process here
if(IDofGridView.Rows != null)
{
lblNoMissing.Visible = true;
}
还是我遗漏了什么?
关于javascript - 在 GridView DataBind 之后更新 ASP.NET 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7573719/