2014-10-31 69 views
0

我绑定从json到客户端的telerik RadGrid列表数组。绑定数据对象radgrid控件的代码如下所示:telerik radgrid get_masterTableView()不绑定json数据绑定到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.. 

回答

0

当你试图用JSON数据绑定radgrid控件这就是为什么你得到这个错误。

要解决此问题,您必须使用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链接了解更多细节。

+0

我做了这种方式创建虚拟数据..在页面加载时,我创建了虚拟数据绑定到网格。然后用户点击搜索按钮,真正的代码被执行。然而,我仍然得到相同的错误.. – 2014-10-31 11:00:30

+0

你能提供你的代码吗? – 2014-10-31 19:39:08

+0

您可以在您的应用程序中创建一个新页面,并复制下面的所有代码链接并进行检查。如果它仍然不能正常工作,我会提供工作演示。 http://www.telerik.com/forums/get-radgrid-cell-value-on-button-click#QfNXbRpwLE-5GL6yMd70hQ – 2014-11-03 06:13:29