Drag/Drop error: Unable to get value of the property 'rows': object is null or undefined

2 posts, 0 answers
  1. Chris
    Chris avatar
    17 posts
    Member since:
    Oct 2010

    Posted 12 May 2012 Link to this post

    Hi,

    I am testing out the Drag/Drop capabilities of the RadGrid (dragging from one grid to another), and I've come across a problem. It works great when the grid I'm dragging from has more than one row, but if there's one row I get the following JScript error thrown:

    Microsoft JScript runtime error: Unable to get value of the property 'rows': object is null or undefined

    Here's my ASPX markup:

        <script type="text/javascript">
     
            function OnClientUpdated(sender, args) {
                var message = "Update (check) was done!";
                var newMsgs = sender.get_value();
                if (newMsgs != 0) {
                    sender.show();
                    message += (newMsgs == 1) ? (" There is 1 new message!") : (" There are " + newMsgs + " new messages!");
                }
                else {
                    message += " There are no new messages!";
                }
            }
             
        </script>
        <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
        </telerik:RadScriptManager>
        <telerik:RadScriptBlock runat="server" ID="scriptBlock">
     
            <script type="text/javascript">
                    <!--
                function onRowDropping(sender, args) {
                    if (sender.get_id() == "<%=RadGrid1.ClientID %>") {
                        var node = args.get_destinationHtmlElement();
                        if (!isChildOf('<%=RadGrid2.ClientID %>', node) && !isChildOf('<%=RadGrid1.ClientID %>', node)) {
                            args.set_cancel(true);
                        }
                    }
                    else {
                        var node = args.get_destinationHtmlElement();
                        if (!isChildOf('trashCan', node)) {
                            args.set_cancel(true);
                        }
                        else {
                            if (confirm("Are you sure you want to delete this order?"))
                                args.set_destinationHtmlElement($get('trashCan'));
                            else
                                args.set_cancel(true);
                        }
                    }
                }
     
                function isChildOf(parentId, element) {
                    while (element) {
                        if (element.id && element.id.indexOf(parentId) > -1) {
                            return true;
                        }
                        element = element.parentNode;
                    }
                    return false;
                }
                        -->
            </script>
     
        </telerik:RadScriptBlock>
         <telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server">
             <telerik:RadSplitter ID="RadSplitter1" Width="100%" runat="server">
             <telerik:RadPane runat="server">
       <telerik:RadGrid ID="RadGrid1" runat="server" AllowFilteringByColumn="true"
                     onneeddatasource="RadGrid1_NeedDataSource" onrowdrop="RadGrid1_RowDrop">
       <MasterTableView AllowCustomSorting="true" AllowPaging="true" DataKeyNames="ID" AllowSorting="true" PageSize="20">
       
       </MasterTableView>
         <ClientSettings AllowRowsDragDrop="True" AllowColumnsReorder="true" ReorderColumnsOnClient="true">
                        <Resizing AllowColumnResize="true" />
                        <Selecting AllowRowSelect="True" EnableDragToSelectRows="false"/>
                        <Scrolling AllowScroll="true" UseStaticHeaders="true"/>
                              <ClientEvents OnRowDropping="onRowDropping" />
                    </ClientSettings>
    </telerik:RadGrid>     
             </telerik:RadPane>
             <telerik:RadSplitBar runat="server"></telerik:RadSplitBar>
             <telerik:RadPane runat="server">
       <telerik:RadGrid ID="RadGrid2" runat="server" AllowFilteringByColumn="true"
                     onneeddatasource="RadGrid2_NeedDataSource" onrowdrop="RadGrid2_RowDrop">
       <MasterTableView AllowCustomSorting="true" DataKeyNames="ID" AllowPaging="true" AllowSorting="true" PageSize="20">
       
       </MasterTableView>
         <ClientSettings AllowRowsDragDrop="True" AllowColumnsReorder="true" ReorderColumnsOnClient="true">
                        <Resizing AllowColumnResize="true" />
                                 <ClientEvents OnRowDropping="onRowDropping" />
     
                        <Selecting AllowRowSelect="True" EnableDragToSelectRows="false"/>
                        <Scrolling AllowScroll="true" UseStaticHeaders="true"/>
                    </ClientSettings>
    </telerik:RadGrid>     
              
             </telerik:RadPane>
             
             </telerik:RadSplitter>
        
    </telerik:RadAjaxPanel>
     
      <telerik:RadNotification ID="RadNotification1" runat="server" LoadContentOn="TimeInterval"
            Width="300" Animation="Fade" EnableRoundedCorners="true" EnableShadow="true"
            OnClientUpdated="OnClientUpdated" Title="Notifications" OffsetX="-20" OffsetY="-20"
            TitleIcon="none" UpdateInterval="10000" AutoCloseDelay="1500" OnCallbackUpdate="OnCallbackUpdate">
            <ContentTemplate>
                <asp:Literal ID="lbl" runat="server"></asp:Literal>
            </ContentTemplate>
        </telerik:RadNotification>

    Here's my code behind:

    public IList<Delivery> _Deliveries
            {
                get { return (List<Delivery>)Session["Deliveries"]; }
                set { Session["Deliveries"] = value; }
            }
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    _Deliveries = new List<Delivery>();
                    _Deliveries.Add(new Delivery { ID = 1, Assigned = false, Customer = "Micross", TripDate = DateTime.Today });
                    _Deliveries.Add(new Delivery { ID = 2, Assigned = false, Customer = "Test", TripDate = DateTime.Today });
                    _Deliveries.Add(new Delivery { ID = 3, Assigned = false, Customer = "Micross3", TripDate = DateTime.Today });
                    _Deliveries.Add(new Delivery { ID = 4, Assigned = false, Customer = "Test3", TripDate = DateTime.Today });
     
                    RadGrid1.DataBind();
                }
            }
     
            private void BindMain()
            {
                RadGrid1.DataBind();
            }
     
            private void BindSecond()
            {
                RadGrid2.DataSource = _Deliveries.Where(a => a.Assigned == true);
                RadGrid2.DataBind();
            }
     
     
     
            protected void OnCallbackUpdate(object sender, RadNotificationEventArgs e)
            {
                int newMsgs = DateTime.Now.Second % 10;
                if (newMsgs == 5 || newMsgs == 7 || newMsgs == 8 || newMsgs == 9) newMsgs = 0;
                lbl.Text = String.Concat(new object[] { "You have ", newMsgs, " new invoices to process!" });
                RadNotification1.Value = newMsgs.ToString();
            }
     
            protected void RadGrid2_RowDrop(object sender, GridDragDropEventArgs e)
            {
                    foreach (GridDataItem draggedItem in e.DraggedItems)
                    {
                        var tmpOrder = _Deliveries.Where(a => a.ID == (long)draggedItem.GetDataKeyValue("ID")).Single();
                        tmpOrder.Assigned = false;
                    }
     
                    RadGrid1.Rebind();
                    RadGrid2.Rebind();
               
            }
     
            protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
            {
                RadGrid1.DataSource = _Deliveries.Where(a => a.Assigned == false);
     
            }
     
            protected void RadGrid2_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
            {
                RadGrid2.DataSource = _Deliveries.Where(a => a.Assigned == true);
     
            }
     
            protected void RadGrid1_RowDrop(object sender, GridDragDropEventArgs e)
            {
     
                    foreach (GridDataItem draggedItem in e.DraggedItems)
                    {
                        var tmpOrder = _Deliveries.Where(a => a.ID == (long)draggedItem.GetDataKeyValue("ID")).Single();
                        tmpOrder.Assigned = true;
                    }
                    RadGrid1.Rebind();
                    RadGrid2.Rebind();
              
            }

    Thanks!
  2. Chris
    Chris avatar
    17 posts
    Member since:
    Oct 2010

    Posted 12 May 2012 Link to this post

    Sorry, wrong forum! Meant for the grid forum
  3. UI for ASP.NET Ajax is Ready for VS 2017
Back to Top