【问题标题】:RadGrid client binding get_masterTableView() is nullRadGrid 客户端绑定 get_masterTableView() 为空
【发布时间】:2014-12-02 17:45:20
【问题描述】:

我在客户端设置数据源,但 get_masterTableView 返回 null

var tableView = radGrid
     .get_masterTableView();

我尝试在按钮单击时设置它,以确保 Radgrid 已完全创建,但它仍然返回 null。这是我的代码

<h4>Client Side Binding</h4>

<telerik:RadButton 
    ID="RadButton1" 
    AutoPostBack="False"
    OnClientClicked="RadButton1_OnClientClicked"
    runat="server" 
    Text="Load Items"></telerik:RadButton>

<telerik:RadGrid 
    ID="RadGrid1" 
    AutoGenerateColumns="False"
    runat="server">
    <MasterTableView>
        <Columns>
            <telerik:GridBoundColumn
                DataField="Name"
                HeaderText="Name">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn
                DataField="Age"
                HeaderText="Age">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn
                DataField="Address.City"
                HeaderText="City">
            </telerik:GridBoundColumn>
        </Columns>
    </MasterTableView>
    <ClientSettings>
        <ClientEvents OnGridCreated="RadGrid1_OnGridCreated" />
    </ClientSettings>
</telerik:RadGrid>

这是在 Javascript

<telerik:RadScriptBlock runat="server">
    <script>
        function pageLoad(sender, args) {
            //rebindGrid();
        }

        function RadButton1_OnClientClicked(sender, args) {
            rebindGrid();
        }

        function RadGrid1_OnGridCreated(sender, args) {
            //rebindGrid();
        }

        function rebindGrid() {
            var ds = dataSource();
            var radGrid = $find('<%= RadGrid1.ClientID %>');
            var tableView = radGrid
               .get_masterTableView();

            console.log(radGrid);

            if (tableView) {
                tableView.set_dataSource(ds);
                tableView.dataBind();
                tableView.set_virtualItemCount(2);
            } else {
                alert('Table View is null');
            }
        }

        function dataSource() {
            var items = [];

            items.push({
                Name: 'Enteng',
                Age: 25,
                Address: {
                    City: 'Dipolog City'
                }
            });

            items.push({
                Name: 'Vincent',
                Age: 27,
                Address: {
                    City: 'Dumaguete City'
                }
            });

            return items;
        }
    </script>
</telerik:RadScriptBlock>

pageLoad 不起作用

RadButton1_OnClientClicked 不起作用

RadGrid1_OnGridCreated 不起作用

任何帮助将不胜感激..

TYI

【问题讨论】:

    标签: javascript asp.net telerik telerik-grid


    【解决方案1】:

    OnGridCreated 应该可以工作。我认为您的代码中存在错误:

    这个:

    var radGrid = $find('<%= RadGrid1.ClientID %>');
    

    应该看起来像:

    var radGrid = $find('#<%= RadGrid1.ClientID %>');
    

    或者,您可以使用 sender 参数来获取 radgrid 的句柄:

    function RadGrid1_OnGridCreated(sender, args) {
       rebindGrid(sender);
    }
    
    function rebindGrid(sender) {
       var tableView = sender.get_masterTableView();
       ... etc
    

    编辑:

    正如下面评论中所述,问题是 radgird 未绑定到任何数据 资源。因此 get_masterTableView() 返回 null。

    以下将网格绑定到虚拟数据源的代码解决了这个问题:

    protected void Page_Load(object sender, EventArgs e)
    {
         RadGrid1.DataSource = new List<int>();
    }
    

    【讨论】:

    • 感谢您的回复.. $find('#');
    • 嗯...你是对的。我能想到的唯一可能原因是您需要初始化 rad 网格的数据源......为了使网格加载其 MasterTableView 对象,您必须在初始加载时设置一些空数据源。
    猜你喜欢
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多