I have implemented loading on demand for items at the "Child Node" level so it would automatically pull the sub-items when that node is expanded (using ServerSideCallBack) which works great. I have also implemented a context menu for each "Child Node" entry that has an "Add Category" option which adds a new item (at the Sub Node level) so a new entry can be added. This entire process works great and is surprisingly versatile.
The only issue I have is when the new item is added I want all the "Sub Node" entries for the parent "Child Node" item to be re-bound so the items appear in alphabetical order. I tried using the set_expanded() methods but it seems once a node has been expanded the items are cached and there isn't a way to forcefully tell it to go get the items again. Basically I'm looking for a client-side method call that tells the "Child Node" entry that it needs to go get a fresh copy of items once the adding process is complete.
Any idea on how to make this happen?
function rowContextMenu(sender, eventArgs) { var menu = $find("<%= menuDrivers.ClientID %>"); var evt = eventArgs.get_domEvent(); if (evt.target.tagName == "INPUT" || evt.target.tagName == "A") return; // Get trip ID + type from source row var index = eventArgs.get_itemIndexHierarchical(); var row = sender.Control.children[1].children[0].rows[parseInt(index)]; var rowElements = row.getElementsByTagName("input"); alert(sender); alert('Row index ' + index + ' clicked. Trip ID is ' + rowElements[0].value); // Store the trip ID and type in hidden fields $get("ContextTripID").value = rowElements[0].value; $get("ContextTripType").value = rowElements[1].value; // more code continues here ...}<%@ Page Language="VB" AutoEventWireup="false" CodeFile="akUITest.aspx.vb" Inherits="Testing_akUITest" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <telerik:RadScriptManager ID="sm" runat="server"> </telerik:RadScriptManager> <div> <telerik:RadWindowManager ID="radWindowManager" runat="server"> <Windows> <telerik:RadWindow ID="radWindowEditor" runat="server" VisibleOnPageLoad="true"> <ContentTemplate> <telerik:RadEditor ID="radEditor" runat="server"> </telerik:RadEditor> </ContentTemplate> </telerik:RadWindow> </Windows> </telerik:RadWindowManager> </div> </form></body></html>
function OnCheck_Changed(cb) {
var add1 = $get("<%= txt_Address.ClientID %>");
var add2 = $get("<%= txt_Address2.ClientID %>");
var city = $get("<%= txt_City.ClientID %>");
var zip = $get("<%= txt_PostalCode.ClientID %>");
var state = $find("<%= cb_State.ClientID %>");
var hadd1 = $get("<%= hdf_Address.ClientID %>");
var hadd2 = $get("<%= hdf_Address2.ClientID %>");
var hcity = $get("<%= hdf_City.ClientID %>");
var hstate = $get("<%= hdf_State.ClientID %>");
var hzip = $get("<%= hdf_PostalCode.ClientID %>");
if (cb.checked == true) {
//alert(hadd1);
add1.value = hadd1.value;
add2.value = hadd2.value;
city.value = hcity.value;
zip.value = hzip.value;
//var select = state.findItemByValue(hcity.value);
//select.select();
add1.readOnly = true;
add2.readOnly = true;
city.readOnly = true;
zip.readOnly = true;
//state.Disable();
}
else {
//alert(state);
add1.readOnly = false;
add2.readOnly = false;
city.readOnly = false;
zip.readOnly = false;
//state.Enabled = true;
}
}
This is the radcombobox I am trying to get:<telerik:RadComboBox ID="cb_State" runat="server" DataSourceID="eds_States" HighlightTemplatedItems="true" AutoPostBack="false" Skin="Simple" DropDownWidth="195" EnableLoadOnDemand="True" Width="75px" DataValueField="STATE_CODE" DataTextField="STATE_CODE" OnDataBound="cb_State_DataBound" Enabled="false"> <HeaderTemplate> <table> <tr> <td style="width: 45px"> State Code </td> <td style="width: 150px"> State Name </td> </tr> </table> </HeaderTemplate> <ItemTemplate> <table> <tr> <td style="width: 45px"> <%# DataBinder.Eval(Container.DataItem, "STATE_CODE")%> </td> <td style="width: 150px"> <%# DataBinder.Eval(Container.DataItem, "STATE")%> </td> </tr> </table> </ItemTemplate> </telerik:RadComboBox><telerik:RadTreeView ID="RadTreeView1" runat="server" DataFieldID="ID" DataFieldParentID="ParentID" MultipleSelect="true" EnableDragAndDrop="true" OnClientDoubleClick="onNodeDoubleClick" OnClientNodeClicked="onNodeClick" EnableDragAndDropBetweenNodes="true" ShowLineImages="true" OnClientContextMenuItemClicking="onClientContextMenuItemClicking" OnClientNodeExpanded="onNodeExpanded" OnClientContextMenuShowing="onClientContextMenuShowing" Skin="dsSkin" EnableEmbeddedSkins="False" AppendDataBoundItems="true"> <Nodes> <telerik:RadTreeNode Text="Document Date" Value="dateslider" > <NodeTemplate>Document Date</NodeTemplate> <Nodes> <telerik:RadTreeNode Value="datesliderchild" > <NodeTemplate> <%-- Node Template with control which I need to access AFTER ajax requests --%> <telerik:RadSlider runat="server" ID="radSliderDates" IsSelectionRangeEnabled="true" Width="250" AutoPostBack="true" ShowDecreaseHandle="false" ShowIncreaseHandle="false" OnClientValueChanging="onClientValueChanging" OnClientSlideStart="onClientSlideStart" OnClientSlideEnd="onClientSlideEnd" OnClientSlide="onClientSlide" /> </NodeTemplate> </telerik:RadTreeNode> </Nodes> </telerik:RadTreeNode> </Nodes> <NodeTemplate> <%-- Global Node Template which I apply to data-bound items --%> </NodeTemplate></telerik:RadTreeView>protected void Page_Load(object sender, EventArgs e){ #region Load Event Handlers //Find node I am looking for - then assign controls to protected page variables. //On postbacks/ajax requests, the node is found, but the FindControl method does not find anything because the node has the wrong template RadTreeNode node = RadTreeView1.FindNodeByValue("datesliderchild"); radSliderDates = (RadSlider)node.FindControl("radSliderDates"); lblSliderEndDate = (Label)node.FindControl("lblSliderEndDate"); lblSliderStartDate = (Label)node.FindControl("lblSliderStartDate"); radSliderDates.ValueChanged += new EventHandler(radSliderDates_ValueChanged); #endregion if (!IsPostBack) { }}