RadGrid客户端绑定get_masterTableView()为null

时间:2014-10-08 06:36:49

标签: javascript asp.net telerik telerik-grid

我在客户端设置数据源,但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

1 个答案:

答案 0 :(得分: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>();
}