首页 > 解决方案 > 从 javascript 一致地访问 gridview 行数据

问题描述

我有一个包含使用 DataSourceID 属性绑定到它的 SQL 数据的 gridview 的 asp.net 网页。我希望能够从各种用户事件(如第二个网格视图中的按钮单击和行单击)启动 JavaScript,并使用 JavaScript 读取 gv1 数据并执行一些简单的操作。我的问题是,我的一些 JavaScript 调用在 gridview 中看到了数据,但很多时候我在 gridview 中看到的只是一个标题(没有数据行!)。

例如,如果我使用 Page_Load() 调用 JavaScript

ScriptManager.RegisterStartupScript(Me, Page.GetType, "Script", "jsPageLoadFirst();", True)

然后我总是在初始页面加载以及一些回发中看到 gridview 数据。然而,在其他回发中,gridview 已被剥离,我所看到的只是 gridview 标题(行未定义)。

同样,如果我在 html 正文中设置对 JavaScript 的调用

<body id="mybody" onload="JavaScript:myJSsub();">

JavaScript 子程序永远不会看到 gridview 数据;只有标题,但没有行。我认为客户端 onload 事件仅在页面完全加载后发生(包括所有数据绑定!)但显然不是!请注意,我总是在网页上看到显示的 gridview 数据,甚至在我单击按钮调用 JavaScript 之前,所以为什么 gridview 数据有时会被剥离对我来说是个谜!

几天来,我一直在拔头发,试图弄清楚这一点。谁能告诉我我做错了什么,以及如何确保 gridview 行数据始终可供我的 JavaScript 订阅者使用,无论我在哪里(或如何)启动它们?

谢谢!

-汤姆

10/7 更新:这里有更多信息,以及我今天使用隐藏字段想出的可能解决方法。首先,我主要使用对document.getElementById("gv1"). 因此,首先,由于我从第一个服务器 PageLoad 事件触发的 JavaScript 子程序可以使用所有 gridview 数据,因此我尝试将 gridview 数据保存在全局变量“gvar1”和页面上的隐藏字段中“ HF1”。这是我的 JavaScript 的样子:

    function jsPageLoadFirst() {
        // Save gv1 to a global variable
        gvar1 = document.getElementById("gv1");

        // *** Also save gv1's html to a hidden field
        document.getElementById("hf1").value = document.getElementById("gv1").innerHTML;
    }

现在,在我从主体的 onload() 事件触发的 JavaScript 子程序中,我检查了所有三个的值。我总是发现 1)document.getElementById("gv1")仅显示 gridview 标题(但没有行),2)gvar1未定义,3)hf1看起来很好 - 所有行数据都存在。同样,当从服务器 Postback 页面加载触发 javascript 时,有时会document.getElementById("gv1")显示所有 gridview 数据,但有时它只显示 gridview 标题但没有行数据。有人可以向我解释为什么document.getElementById("gv1")不总是显示行数据吗?我想如果我理解了这一点,我就能清楚地了解我的其余代码是否正常工作。谢谢!!!

标签: javascriptasp.netvb.netgridview

解决方案


推荐阅读