【问题标题】:telerik radgrid get_masterTableView() not taken on binding json data to radgridtelerik radgrid get_masterTableView() 未将 json 数据绑定到 radgrid
【发布时间】:2014-12-27 10:52:22
【问题描述】:

我正在从客户端将一个列表数组从 json 绑定到 telerik RadGrid。将数据对象绑定到radgrid的代码如下:

         <telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
            <script type="text/javascript">            
                function SetInTelerikGrid(data) {

                    var tableView = $find('<%=rgRetrievalList.ClientID %>').get_masterTableView();
                     tableView.set_dataSource(data);
                     tableView.dataBind();
                 }
            </script>
        </telerik:RadCodeBlock>

radgrid 定义为:

      <telerik:RadGrid ID="rgRetrievalList"  runat="server"  >
           <MasterTableView TableLayout="Auto">
                  <Columns>
                      <telerik:GridBoundColumn DataField="ID" UniqueName="ID" HeaderText="ID" >
                      </telerik:GridBoundColumn>
                   </Columns>
              </MasterTableView>
      </telerik:RadGrid>

Here, as the code reached var tableView = $find('<%=rgRetrievalList.ClientID %>').get_masterTableView(); an error is thrown: Typeerror: cannot read property 'get_masterTableView()' of null. I do not know why it is note able  to take property get_masterTableView() of radgrid. Can anyone help me??    Thanks in advance..

【问题讨论】:

    标签: javascript asp.net telerik telerik-grid


    【解决方案1】:

    当您尝试将 Radgrid 与 JSON 数据绑定时,这就是您收到此错误的原因。

    要解决此问题,您必须使用 client side binding method 绑定您的 radgrid,或者为 json 数据绑定添加虚拟数据。

    为json数据绑定添加虚拟数据:

    ASPX

    <!DOCTYPE html>
    <html>
    <head runat="server">
        <title></title>
        <script src="Script/jquery-1.10.2.min.js"></script>
        <telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
            <script type="text/javascript">
    
                var GridData;
    
                function OnbuttonClient() {
    
    
    
                    jQuery.ajax({
                        type: 'POST',
                        contentType: 'application/json; charset=utf-8',
                        data: '',
                        dataType: 'JSON',
                        url: 'Forum.aspx/BindGrid',
                        success: function (result) {
    
                            GridData = result.d;
                            if (GridData.length > 0) {
                                var divGridContainer = document.getElementById('divGridContainer');
                                divGridContainer.style.display = "";
                                var tableView = $find("<%= RadGrid1.ClientID %>").get_masterTableView();
                                tableView.set_dataSource(GridData);
                                tableView.dataBind();
    
                            }
                            else {
                                var divGridContainer = document.getElementById('divGridContainer');
                                divGridContainer.style.display = "none";
                            }
                        },
                        error: function () {
                            alert('Error on binding the data');
                        }
                    });
    
                    return false;
                }
    
    
    
            </script>
        </telerik:RadCodeBlock>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <telerik:RadScriptManager ID="RadScriptManager1" EnablePageMethods="true" runat="server">
                </telerik:RadScriptManager>
                <asp:Button ID="Button1" Text="Bind Grid" runat="server" OnClientClick="return OnbuttonClient();" />
    
    
                <div id="divGridContainer" style="display: none;">
                    <telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="false">
                        <MasterTableView HierarchyLoadMode="Client" DataKeyNames="ID,ParentID" ClientDataKeyNames="ID,ParentID">
                            <Columns>
                                <telerik:GridBoundColumn DataField="ID" UniqueName="ID" HeaderText="ID">
                                </telerik:GridBoundColumn>
    
                            </Columns>
                        </MasterTableView>
    
                    </telerik:RadGrid>
                </div>
            </div>
        </form>
    </body>
    </html>
    

    ASPX.CS

    protected void Page_Init(object source, System.EventArgs e)
    {
    
    
    }
    
    public void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            dynamic data = new[] {
                new { ID = "1", Name ="Name11",ParentID = "0"}
            };
            RadGrid1.MasterTableView.DataSource = data;
            RadGrid1.DataBind();
        }
    }
    
    
    protected void Page_PreRender(object sender, EventArgs e)
    {
    
    }
    
    
    
    
    [WebMethod]
    public static List<Employee> BindGrid()
    {
        List<Employee> list = new List<Employee>(); ;
    
        Employee obj = new Employee();
        obj.ID = "1";
        obj.Name = "Name1";
        list.Add(obj);
    
        obj = new Employee();
        obj.ID = "2";
        obj.Name = "Name2";
        list.Add(obj);
    
        return list;
    }
    
    
    [Serializable]
    public class Employee
    {
        public string ID { get; set; }
        public string Name { get; set; }
    
    }
    

    请查看this链接了解更多详情。

    【讨论】:

    • 我正是以这种方式创建了虚拟数据。在页面加载时,我创建了虚拟数据以绑定到网格。然后用户点击搜索按钮,真正的代码被执行。但是,我仍然遇到同样的错误..
    • 您能否在您的应用程序中创建一个新页面并从以下链接复制所有代码并检查它。如果它仍然无法正常工作,那么我将提供工作演示。 telerik.com/forums/…
    • 我在我的服务器端添加了这些代码,现在它可以工作了。受保护的覆盖无效 OnInit(System.EventArgs e) { base.OnInit(e); rgRetrievalList.NeedDataSource += new Telerik.Web.UI.GridNeedDataSourceEventHandler(RadGrid1_NeedDataSource); } void RadGrid1_NeedDataSource(对象源,Telerik.Web.UI.GridNeedDataSourceEventArgs e){ rgRetrievalList.AllowCustomPaging = true; rgRetrievalList.VirtualItemCount = 1000; rgRetrievalList.DataSource = new List(); }
    • 请在您的问题中提供您的解决方案。因此,它将对其他人有所帮助。谢谢。
    • 受保护的覆盖无效 OnInit(System.EventArgs e) { base.OnInit(e); rgRetrievalList.NeedDataSource += new Telerik.Web.UI.GridNeedDataSourceEventHandler(RadGrid1_NeedDataSource); } void RadGrid1_NeedDataSource(对象源,Telerik.Web.UI.GridNeedDataSourceEventArgs e){ rgRetrievalList.AllowCustomPaging = true; rgRetrievalList.VirtualItemCount = 1000; rgRetrievalList.DataSource = new List();我在服务器端添加了这些行,它现在正在工作..
    猜你喜欢
    • 2014-12-02
    • 2013-07-02
    • 1970-01-01
    • 2010-10-07
    • 2011-10-27
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多