在 document.ready 中访问 Infragistics WebDataGrid

Accessing Infragistics WebDataGrid in document.ready

我正在尝试向现有 ASP.NET 应用添加一些 JQuery。通常隐藏的 div 中包含一个 WebDataGrid,还有一个将显示网格的按钮。

网格可能有也可能没有任何数据。我希望能够根据网格是否包含任何数据来更改显示网格的按钮的样式。问题是 ig_controls 似乎不包含 document.ready() 处理程序中的 WebDataGrid 对象。

这里是相关的HTML-

<div id="grids">
    <ig:WebDataGrid ID="WebDataGrid1" ... />
    <button type="button" class="btnClose">Close</button>
</div>
.
.
.
<button type="button" id="btnShow">Show</button>

以及 javascript -

$(function() {
    function UpdateShowButton() {
        // When called from the click handler, 'grid'is non-null,
        // otherwise, 'grid' is null.
        var grid = ig_controls.WebDataGrid1;
        if (grid.get_rows().get_length() > 0) {
            $('#btnShow').addStyle('hasItems');
        } else {
            $('#btnShow').removeStyle('hasItems');
        }
    }

    // View the grid when clicked.
    $('#btnShow').on('click', function() {
        $('#grids').show();
    }

    // Hide the grid, and update the "Show" button
    $('#btnClose').on('click', function() {
        // Hide the grid
        $('#grids').hide();
        UpdateShowButton(); // This call works    
    }

    // Finally, on postbacks, ensure the "Show" button is styled properly
    UpdateShowButton(); // This fails
});

直接用

获取网格
var grid = $('#WebDataGrid')

在这两个实例中都是非空的,但没有给我 WebDataGrid 对象,我不确定如何从原始 HTML.

中获取行数

如有任何帮助,我们将不胜感激。谢谢。

更新: 感谢迭戈,这个问题可以解决。而不是这个 -

// Finally, on postbacks, ensure the "Show" button is styled properly
UpdateShowButton(); // This fails

我试过了 -

// Finally, on postbacks, ensure the "Show" button is styled properly
setTimeout(UpdateShowButton, 1);

是的,那是 1。将对 UpdateButton 的调用延迟一毫秒会导致在 ig_controls.

中可以访问 WebDataGrid 对象

由于延迟持续时间微不足道(并且该应用程序仅供内部使用),我不介意将此代码留在其中。但我仍然想找出为什么需要解决方法,或找到修复方法这看起来不像是这样的 hack。

最可能的情况是,在某些时候,Infragistics 网格的初始化使用了一些异步函数。通过使用毫秒延迟,您可以在 Infragistic 之后执行代码。实际的毫秒数并不重要。

如果您想获得更清晰的代码,我会询问 Infragistics 可以做什么或正在发生什么。

祝你好运!