This is a migrated thread and some comments may be shown as answers.

[Solved] Getting Error on Expanding row on radGrid on Client Mode

1 Answer 167 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Ashok
Top achievements
Rank 1
Ashok asked on 21 Mar 2013, 03:43 PM
Hi,

When i expand a row in dynamic radgrid, i get error "Microsoft Jsscript runtime error: 'null' is null or not an object" on client side. I have used Client HierarchyLoadMode.

OrdersGridz.MasterTableView.HierarchyLoadMode =

 

GridChildLoadMode.Client;

 

 
Please see the error attached. Please help, it is killing me.

Code behind:
public void LoadDynamicData()
   {
       List<Orders> lstOrders = new List<Orders>();
       lstOrders.Add(new Orders() { CompanyName = "Readable VoiceMail", OrderID = 1, OrderDate = DateTime.Now, TelNumbers = "1234567890" });
       lstOrders.Add(new Orders() { CompanyName = "Call Blocking", OrderID = 3, OrderDate = DateTime.Now, TelNumbers = "1234567890" });
       lstOrders.Add(new Orders() { CompanyName = "Readable VoiceMail", OrderID = 2, OrderDate = DateTime.Now, TelNumbers = "1237894560" });        
       var telNumbers =
              (from dbo in lstOrders
               select dbo.TelNumbers).Distinct().OrderBy(TelNumbers => TelNumbers);
       RadGrid OrdersGridz = new RadGrid();
       foreach (string tel in telNumbers)
       {
           OrdersGridz = new RadGrid { ID = "OrdersGridz" };
                       
           OrdersGridz.ClientSettings.AllowExpandCollapse = true;
           OrdersGridz.DetailTableDataBind += new GridDetailTableDataBindEventHandler(OrdersGridz_DetailTableDataBind);
           OrdersGridz.EnableLinqExpressions = false;
           OrdersGridz.MasterTableView.ShowHeader = true;
             
           GridTableView tableViewOrders = new GridTableView(OrdersGridz);
           tableViewOrders.ClientDataKeyNames = new string[] { "OrderID" };
           tableViewOrders.DataKeyNames = new string[] { "OrderID" };
           tableViewOrders.Name = "Orders";
           tableViewOrders.AutoGenerateColumns = true;
           GridRelationFields relationFields = new GridRelationFields();
           relationFields.MasterKeyField = "OrderID";
           relationFields.DetailKeyField = "OrderID";
           tableViewOrders.ParentTableRelation.Add(relationFields);
           OrdersGridz.MasterTableView.AutoGenerateColumns = true;
           OrdersGridz.MasterTableView.ClientDataKeyNames = new string[] { "OrderID" };
           OrdersGridz.MasterTableView.DataKeyNames = new string[] { "OrderID" };
           OrdersGridz.MasterTableView.HierarchyLoadMode = GridChildLoadMode.Client;
           OrdersGridz.MasterTableView.DetailTables.Add(tableViewOrders);
           OrdersGridz.InsertCommand+=new GridCommandEventHandler(OrdersGridz_InsertCommand);
            
           var lstOrdersz =
              (from dbo in lstOrders
               select dbo).Where(x => x.TelNumbers.Equals(tel)).ToList();
           OrdersGridz.DataSource = lstOrdersz;
           OrdersGridz.DataBind();
             
           //adding raddock dynamically
           RadDock dock = new RadDock();
           dock.ID = tel;
           dock.Title = tel;
           dock.DockMode = DockMode.Docked;
           dock.EnableDrag = false;
             
           dock.Commands.Add(new DockExpandCollapseCommand());
           dock.Command += new DockCommandEventHandler(dock_Command);
           dock.ContentContainer.Controls.Add(OrdersGridz);
           RadDockZone5.Controls.Add(dock);
                      
       }        
   }
   protected void OrdersGridz_InsertCommand(object sender, GridCommandEventArgs e)
   {
       if (e.CommandName == RadGrid.ExpandCollapseCommandName)
       {
             
       }
   }
   protected void OrdersGridz_DetailTableDataBind(object source, Telerik.Web.UI.GridDetailTableDataBindEventArgs e)
   {
       List<Products> lstProducts = new List<Products>();
         
       lstProducts.Add(new Products() { ProductName = "A", UnitPrice = 0, OrderID = 1 });
       lstProducts.Add(new Products() { ProductName = "B", UnitPrice = 0, OrderID = 1 });
       lstProducts.Add(new Products() { ProductName = "C", UnitPrice = 0, OrderID = 1 });
       lstProducts.Add(new Products() { ProductName = "X", UnitPrice = 0, OrderID = 2 });
       lstProducts.Add(new Products() { ProductName = "Y", UnitPrice = 0, OrderID = 2 });
       lstProducts.Add(new Products() { ProductName = "M", UnitPrice = 0, OrderID = 3 });
       lstProducts.Add(new Products() { ProductName = "N", UnitPrice = 0, OrderID = 3 });
       lstProducts.Add(new Products() { ProductName = "O", UnitPrice = 0, OrderID = 3 });
       lstProducts.Add(new Products() { ProductName = "P", UnitPrice = 0, OrderID = 3 });
       GridDataItem dataItem = (GridDataItem)e.DetailTableView.ParentItem;
       switch (e.DetailTableView.Name)
       {
           case "Orders":
               {
                   string OrderID = dataItem.GetDataKeyValue("OrderID").ToString();
                   e.DetailTableView.DataSource = lstProducts.Where(x => x.OrderID.ToString().Equals(OrderID, StringComparison.OrdinalIgnoreCase)).ToList();
                   break;
               }
       }
   }


Thanks in Advance for your help.

Ashok

1 Answer, 1 is accepted

Sort by
0
Angel Petrov
Telerik team
answered on 26 Mar 2013, 02:21 PM
Hello Ashok,

After examining the sample provided I have found the problem. In the code a foreach statements is used to loop the items in a certain collection. In every iteration the grid id is set and an instance of a GridTableView is created. This logic is causing the problem as multiple instances with the same id are created. In order to resolve the problem you just have to remove the looping logic. In attachments you can find a sample project which uses the code provided and behaves as expected.

All the best,
Angel Petrov
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
Tags
Grid
Asked by
Ashok
Top achievements
Rank 1
Answers by
Angel Petrov
Telerik team
Share this question
or