I realized I had posted this question in perhaps the wrong forum (here) so I am reposting here in hopes that someone might be able to answer this. Any help would be greatly appreciated!
I am trying to recreate functionality found in this demo from telerik.
When I attempt to drag and drop the available orders to shipped orders I receive an error:
Specified argument was out of the range of valid values. Parameter name: ItemHierarchicalIndex
I have modified very little from the default demo code. The only change I have made is the GetOrder routine. Here is my complete code:
The complete server error is:
2010-12-13 11:50:10,491 ERROR Global - Unhandled exception.
System.Web.HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: ItemHierarchicalIndex
at Telerik.Web.UI.GridItemCollection.get_Item(String hierarchicalIndex)
at Telerik.Web.UI.GridDataItemCollection.get_Item(String hierarchicalIndex)
at Telerik.Web.UI.RadGrid.RaisePostBackEvent(String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
I am trying to recreate functionality found in this demo from telerik.
When I attempt to drag and drop the available orders to shipped orders I receive an error:
Specified argument was out of the range of valid values. Parameter name: ItemHierarchicalIndex
I have modified very little from the default demo code. The only change I have made is the GetOrder routine. Here is my complete code:
<%@ Control Language="C#" ClassName="AddPortalDocs" Inherits="Sage.Platform.WebPortal.SmartParts.EntityBoundSmartPartInfoProvider" %><%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %><telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" /><telerik:RadAjaxManager runat="server" ID="radAjax" DefaultLoadingPanelID="RadAjaxLoadingPanel1"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="grdPendingOrders"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="grdPendingOrders" /> <telerik:AjaxUpdatedControl ControlID="grdShippedOrders" /> <telerik:AjaxUpdatedControl ControlID="msg" /> </UpdatedControls> </telerik:AjaxSetting> <telerik:AjaxSetting AjaxControlID="grdShippedOrders"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="grdShippedOrders" /> <telerik:AjaxUpdatedControl ControlID="msg" /> </UpdatedControls> </telerik:AjaxSetting> <telerik:AjaxSetting AjaxControlID="UseDragColumnCheckBox"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="grdPendingOrders" /> <telerik:AjaxUpdatedControl ControlID="grdShippedOrders" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings></telerik:RadAjaxManager><telerik:RadScriptBlock runat="server" ID="scriptBlock"> <script type="text/javascript"> <!-- function onRowDropping(sender, args) { if (sender.get_id() == "<%=grdPendingOrders.ClientID %>") { var node = args.get_destinationHtmlElement(); if (!isChildOf('<%=grdShippedOrders.ClientID %>', node) && !isChildOf('<%=grdPendingOrders.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> <div style="float: left; padding: 0 6px 0 10px"> <h2 style="color: #9c3608"> Pending Orders</h2> <telerik:RadGrid runat="server" ID="grdPendingOrders" OnNeedDataSource="grdPendingOrders_NeedDataSource" AllowPaging="True" Width="350px" OnRowDrop="grdPendingOrders_RowDrop" AllowMultiRowSelection="true" PageSize="30" EnableHeaderContextMenu="true"> <MasterTableView DataKeyNames="OrderId" TableLayout="Fixed"> <Columns> </Columns> </MasterTableView> <ClientSettings AllowRowsDragDrop="True" AllowColumnsReorder="true" ReorderColumnsOnClient="true"> <Resizing AllowColumnResize="true" /> <Selecting AllowRowSelect="True" EnableDragToSelectRows="false"/> <ClientEvents OnRowDropping="onRowDropping" /> <Scrolling AllowScroll="true" UseStaticHeaders="true"/> </ClientSettings> <PagerStyle Mode="NumericPages" PageButtonCount="4" /> </telerik:RadGrid></div><div style="float: right; padding: 0 10px 0 6px"> <h2 style="color: #3c8b04"> Shipped Orders</h2> <telerik:RadGrid runat="server" AllowPaging="True" ID="grdShippedOrders" OnNeedDataSource="grdShippedOrders_NeedDataSource" Width="350px" OnRowDrop="grdShippedOrders_RowDrop" AllowMultiRowSelection="true"> <MasterTableView DataKeyNames="OrderId" Width="100%"> <Columns> </Columns> <NoRecordsTemplate> <div style="height: 30px; cursor: pointer;"> No items to view</div> </NoRecordsTemplate> <PagerStyle Mode="NumericPages" PageButtonCount="4" /> </MasterTableView> <ClientSettings AllowRowsDragDrop="True"> <Selecting AllowRowSelect="True" EnableDragToSelectRows="false" /> <ClientEvents OnRowDropping="onRowDropping" /> </ClientSettings> </telerik:RadGrid></div><div style="clear: both;"> <!-- --></div><asp:Image runat="server" ID="trashcan" ImageUrl="~/images/icons/recycle-bin-icon-32.gif" ToolTip="Drag selected accounts to here to remove them." /><script runat="server" type="text/C#"> public override Sage.Platform.Application.UI.ISmartPartInfo GetSmartPartInfo(Type smartPartInfoType) { Sage.Platform.WebPortal.SmartParts.ToolsSmartPartInfo ti = new Sage.Platform.WebPortal.SmartParts.ToolsSmartPartInfo(); ti.Title = "Test"; return ti; } public Sage.Entity.Interfaces.IAccount CurrentEntity { get { return this.BindingSource.Current as Sage.Entity.Interfaces.IAccount; } } protected void Page_Load(object sender, EventArgs e) { } protected void Page_Init(object sender, EventArgs e) { } protected void Page_PreRender(object sender, EventArgs e) { } [Sage.Platform.Application.ServiceDependency] public new Sage.Platform.Application.IEntityContextService EntityContext { set; get; } public override Type EntityType { get { return typeof(Sage.Entity.Interfaces.IAccount); } } protected override void OnAddEntityBindings() { } protected override void OnFormBound() { base.OnFormBound(); } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// protected System.Collections.Generic.IList<Order> PendingOrders { get { try { object obj = Session["PendingOrders"]; if (obj == null) { obj = GetOrders(); if (obj != null) { Session["PendingOrders"] = obj; } else { obj = new System.Collections.Generic.List<Order>(); } } return (System.Collections.Generic.IList<Order>)obj; } catch { Session["PendingOrders"] = null; } return new System.Collections.Generic.List<Order>(); } set { Session["PendingOrders"] = value; } } protected System.Collections.Generic.IList<Order> ShippedOrders { get { try { object obj = Session["ShippedOrders"]; if (obj == null) { Session["ShippedOrders"] = obj = new System.Collections.Generic.List<Order>(); } return (System.Collections.Generic.IList<Order>)obj; } catch { Session["ShippedOrders"] = null; } return new System.Collections.Generic.List<Order>(); } set { Session["ShippedOrders"] = value; } } protected void grdPendingOrders_NeedDataSource(object source, GridNeedDataSourceEventArgs e) { grdPendingOrders.DataSource = PendingOrders; } protected System.Collections.Generic.IList<Order> GetOrders() { System.Collections.Generic.IList<Order> results = new System.Collections.Generic.List<Order>(); int i = 0; Sage.Platform.RepositoryHelper<Sage.Entity.Interfaces.IAccount> repository = Sage.Platform.EntityFactory.GetRepositoryHelper<Sage.Entity.Interfaces.IAccount>(); Sage.Platform.Repository.ICriteria criteria = repository.CreateCriteria(); criteria.AddOrder(repository.EF.Asc("AccountName")); System.Collections.Generic.IList<Sage.Entity.Interfaces.IAccount> accounts = criteria.List<Sage.Entity.Interfaces.IAccount>(); foreach (Sage.Entity.Interfaces.IAccount acc in accounts) { int id = (int)i; string customerID = acc.Id.ToString(); DateTime requiredDate = acc.CreateDate.Value; string companyName = acc.AccountName; results.Add(new Order(id, customerID, companyName, requiredDate.ToShortDateString())); i++; } return results; } protected void grdShippedOrders_NeedDataSource(object source, GridNeedDataSourceEventArgs e) { grdShippedOrders.DataSource = ShippedOrders; } protected void grdPendingOrders_RowDrop(object sender, GridDragDropEventArgs e) { if (string.IsNullOrEmpty(e.HtmlElement)) { if (e.DraggedItems[0].OwnerGridID == grdPendingOrders.ClientID) { // items are drag from pending to shipped grid if ((e.DestDataItem == null && ShippedOrders.Count == 0) || e.DestDataItem != null && e.DestDataItem.OwnerGridID == grdShippedOrders.ClientID) { System.Collections.Generic.IList<Order> shippedOrders = ShippedOrders; System.Collections.Generic.IList<Order> pendingOrders = PendingOrders; int destinationIndex = -1; if (e.DestDataItem != null) { Order order = GetOrder(shippedOrders, (int)e.DestDataItem.GetDataKeyValue("OrderId")); destinationIndex = (order != null) ? shippedOrders.IndexOf(order) : -1; } foreach (GridDataItem draggedItem in e.DraggedItems) { Order tmpOrder = GetOrder(pendingOrders, (int)draggedItem.GetDataKeyValue("OrderId")); if (tmpOrder != null) { if (destinationIndex > -1) { if (e.DropPosition == GridItemDropPosition.Below) { destinationIndex += 1; } shippedOrders.Insert(destinationIndex, tmpOrder); } else { shippedOrders.Add(tmpOrder); } pendingOrders.Remove(tmpOrder); } } ShippedOrders = shippedOrders; PendingOrders = pendingOrders; grdPendingOrders.Rebind(); grdShippedOrders.Rebind(); } else if (e.DestDataItem != null && e.DestDataItem.OwnerGridID == grdPendingOrders.ClientID) { //reorder items in pending grid System.Collections.Generic.IList<Order> pendingOrders = PendingOrders; Order order = GetOrder(pendingOrders, (int)e.DestDataItem.GetDataKeyValue("OrderId")); int destinationIndex = pendingOrders.IndexOf(order); if (e.DropPosition == GridItemDropPosition.Above && e.DestDataItem.ItemIndex > e.DraggedItems[0].ItemIndex) { destinationIndex -= 1; } if (e.DropPosition == GridItemDropPosition.Below && e.DestDataItem.ItemIndex < e.DraggedItems[0].ItemIndex) { destinationIndex += 1; } System.Collections.Generic.List<Order> ordersToMove = new System.Collections.Generic.List<Order>(); foreach (GridDataItem draggedItem in e.DraggedItems) { Order tmpOrder = GetOrder(pendingOrders, (int)draggedItem.GetDataKeyValue("OrderId")); if (tmpOrder != null) ordersToMove.Add(tmpOrder); } foreach (Order orderToMove in ordersToMove) { pendingOrders.Remove(orderToMove); pendingOrders.Insert(destinationIndex, orderToMove); } PendingOrders = pendingOrders; grdPendingOrders.Rebind(); int destinationItemIndex = destinationIndex - (grdPendingOrders.PageSize * grdPendingOrders.CurrentPageIndex); e.DestinationTableView.Items[destinationItemIndex].Selected = true; } } } } private static Order GetOrder(System.Collections.Generic.IEnumerable<Order> ordersToSearchIn, int orderId) { foreach (Order order in ordersToSearchIn) { if (order.OrderID == orderId) { return order; } } return null; } protected void grdShippedOrders_RowDrop(object sender, GridDragDropEventArgs e) { if (!string.IsNullOrEmpty(e.HtmlElement) && e.HtmlElement == "trashCan") { System.Collections.Generic.IList<Order> shippedOrders = ShippedOrders; bool deleted = false; foreach (GridDataItem draggedItem in e.DraggedItems) { Order tmpOrder = GetOrder(shippedOrders, (int)draggedItem.GetDataKeyValue("OrderId")); if (tmpOrder != null) { shippedOrders.Remove(tmpOrder); deleted = true; } } if (deleted) { DialogService.ShowMessage("Deleted"); } ShippedOrders = shippedOrders; grdShippedOrders.Rebind(); } } #region Nested type: Order protected class Order { private string _companyName; private string _customerId; private int _orderId; private string _date; public Order(int orderId, string customerId, string companyName, string requiredDate) { _orderId = orderId; _customerId = customerId; _companyName = companyName; _date = requiredDate; } public int OrderID { get { return _orderId; } } public string CustomerID { get { return _customerId; } } public string Company { get { return _companyName; } } public string Date { get { return _date; } } } #endregion </script> The complete server error is:
2010-12-13 11:50:10,491 ERROR Global - Unhandled exception.
System.Web.HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: ItemHierarchicalIndex
at Telerik.Web.UI.GridItemCollection.get_Item(String hierarchicalIndex)
at Telerik.Web.UI.GridDataItemCollection.get_Item(String hierarchicalIndex)
at Telerik.Web.UI.RadGrid.RaisePostBackEvent(String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)