function FocusOnRadWindow() { window.setTimeout(function () { GetRadWindow().GetContentFrame().contentWindow.focus(); var wndHeightValue = GetRadWindow().get_popupElement().style.height.toString().replace("px", ""); document.getElementById("TestLabel").innerHTML = wndHeightValue; }, 100); }<body onload="FocusOnRadWindow()">int wndHeight = Convert.ToInt32(TestLabel.Text) - 130;foreach (GridColumn column in e.Item.OwnerTableView.RenderColumns) { if (column is IGridEditableColumn) { IGridEditableColumn editableCol = (column as IGridEditableColumn); if (editableCol.IsEditable) { editor = editMan.GetColumnEditor(editableCol); if (editor is GridTextColumnEditor) { editorText = (editor as GridTextColumnEditor).Text; editorValue = (editor as GridTextColumnEditor).Text; if (editableCol.Column.UniqueName == "AddressTypeStr") { newAddressType.AddressTypeStr = editorValue.ToString(); } if (editableCol.Column.UniqueName == "TypeDescription") { newAddressType.TypeDescription = editorValue.ToString(); } } } } } // ForEachif (editor is GridBoundColumn) { editorText = (editor as GridBoundColumn).Text; editorValue = (editor as GridBoundColumn).Text; }<telerik:RadGrid ID="ctrlRadGridVideos" runat="server" Height="700" AllowFilteringByColumn="True" EnableAJAX="true" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" GridLines="None" ShowGroupPanel="True" ShowStatusBar="True" Skin="Telerik"> <ClientSettings EnableRowHoverStyle="true" EnablePostBackOnRowClick="true" AllowColumnsReorder="true" AllowDragToGroup="True"> <Selecting AllowRowSelect="True" /> <Scrolling AllowScroll="True" UseStaticHeaders="True" /> <Resizing AllowColumnResize="True" /> </ClientSettings> <MasterTableView CommandItemDisplay="TopAndBottom" DataKeyNames="PrimaryKey" EditItemStyle-ForeColor="#669999"> <RowIndicatorColumn> <HeaderStyle Width="100px" /> </RowIndicatorColumn> <ExpandCollapseColumn> <HeaderStyle Width="100px" /> </ExpandCollapseColumn> <Columns> <telerik:GridEditCommandColumn HeaderStyle-Width="50" ItemStyle-ForeColor="Blue" UniqueName="Edit"> <HeaderStyle Width="50px" /> <ItemStyle ForeColor="Blue" /> </telerik:GridEditCommandColumn> <telerik:GridBoundColumn DataField="VideoTitle" HeaderText="Video Title" UniqueName="VideoTitle" EditFormColumnIndex="0" ShowSortIcon="true"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="VideoSubTitle" HeaderText="Sub Title" UniqueName="VideoSubTitle" EditFormColumnIndex="0" ShowSortIcon="true"> </telerik:GridBoundColumn> <telerik:GridTemplateColumn HeaderText="Description" UniqueName="VideoDescription" EditFormColumnIndex="1" Visible="false" HeaderStyle-VerticalAlign="Top" HeaderStyle-Height="100%" ShowSortIcon="true"> <EditItemTemplate> <telerik:RadEditor ID="ctrlVideoDescriptionRadEditor" runat="server" Content='<%# Bind("VideoDescription") %>' Height="100%" Width="100%" Skin="Web20"> <CssFiles> <telerik:EditorCssFile Value="~/Content/css/RadEditorContentArea.css" /> </CssFiles> </telerik:RadEditor> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Type" UniqueName="VideoType" EditFormColumnIndex="0" Visible="false"> <EditItemTemplate> <telerik:RadComboBox ID="ctrlVideoTypeRadComboBox" runat="server" Width="220px" Skin="Web20" /> </EditItemTemplate> <ItemTemplate> <asp:Label ID="ctrlVideoTypeLabel" runat="server" Text="Video Type" /> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Category" UniqueName="VideoCategory" EditFormColumnIndex="0" Visible="false"> <EditItemTemplate> <telerik:RadComboBox ID="ctrlVideoCategoryRadComboBox" runat="server" Width="220px" Skin="Web20" /> </EditItemTemplate> <ItemTemplate> <asp:Label ID="ctrlVideoCategoryLabel" runat="server" Text="Video Category" /> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridBoundColumn DataField="VideoHyperlink" HeaderText="URL Hyperlink" UniqueName="VideoHyperlink" EditFormColumnIndex="0" Visible="false"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="VideoSEOKeywords" HeaderText="SEO Keywords" UniqueName="SEOKeywords" EditFormColumnIndex="0" Visible="false"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="VideoSEODescription" HeaderText="SEO Description" UniqueName="VideoSEODescription" EditFormColumnIndex="0" Visible="false"> </telerik:GridBoundColumn> <telerik:GridTemplateColumn HeaderText="Rating" UniqueName="Rating" EditFormColumnIndex="0"> <EditItemTemplate> <asp:TextBox ID="ctrlVideoRatingRadTextBox" runat="server" ValidationGroup="checkRating" Width="80px" /> <asp:RegularExpressionValidator ID="RegularExpressionValidatorRating" runat="server" ControlToValidate="ctrlVideoRatingRadTextBox" ErrorMessage="Please Enter Only Numbers" ValidationExpression="^\d+$" ValidationGroup="checkRating" ForeColor="Red"> </asp:RegularExpressionValidator> </EditItemTemplate> <ItemTemplate> <asp:Label ID="ctrlVideoRatingLabel" runat="server" Text="" /> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Height" UniqueName="Height" EditFormColumnIndex="0" Visible="false"> <EditItemTemplate> <asp:TextBox ID="ctrlVideoHeightTextBox" runat="server" ValidationGroup="checkHeight" Width="80px" /> <asp:RegularExpressionValidator ID="RegularExpressionValidatorHeight" runat="server" ControlToValidate="ctrlVideoHeightTextBox" ErrorMessage="Please Enter Only Numbers" ValidationExpression="^\d+$" ValidationGroup="checkHeight" ForeColor="Red"> </asp:RegularExpressionValidator> </EditItemTemplate> <ItemTemplate> <asp:Label ID="ctrlVideoHeightLabel" runat="server" Text="Height" /> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Width" UniqueName="Width" EditFormColumnIndex="0" Visible="false"> <EditItemTemplate> <asp:TextBox ID="ctrlVideoWidthTextBox" runat="server" ValidationGroup="checkWidth" Width="80px" /> <asp:RegularExpressionValidator ID="RegularExpressionValidatorWidth" runat="server" ControlToValidate="ctrlVideoWidthTextBox" ErrorMessage="Please Enter Only Numbers" ValidationExpression="^\d+$" ValidationGroup="checkWidth" ForeColor="Red"> </asp:RegularExpressionValidator> </EditItemTemplate> <ItemTemplate> <asp:Label ID="ctrlVideoWidthLabel" runat="server" Text="Width" /> </ItemTemplate> </telerik:GridTemplateColumn> <%-- <telerik:GridTemplateColumn HeaderText="Hyperlink" UniqueName="VideoHyperlink" EditFormColumnIndex="0"> <EditItemTemplate> <telerik:RadTextBox ID="ctrlVideoHyperlinkRadTextBox" runat="server" Width="220px" Skin="Web20" /> </EditItemTemplate> <ItemTemplate> <asp:Label ID="ctrlVideoHyperLinkLabel" runat="server" Text="Video Hyperlink" /> </ItemTemplate> </telerik:GridTemplateColumn> --%> <telerik:GridButtonColumn CommandName="Delete" Text="Delete" UniqueName="Delete" HeaderStyle-Width="50" ConfirmText="Confirm: Delete Selected Video?" ConfirmTitle="Confirmation" ItemStyle-ForeColor="Blue"> <HeaderStyle Width="50px" /> <ItemStyle ForeColor="Blue" /> </telerik:GridButtonColumn> </Columns> <EditItemStyle ForeColor="#669999" /> <PagerStyle AlwaysVisible="True" /> <EditFormSettings EditFormType="AutoGenerated" FormStyle-Height="500" FormStyle-Width="100%" ColumnNumber="3" > <%-- <EditColumn UniqueName="EditColumn0" > </EditColumn>--%> <FormTableItemStyle Wrap="False"></FormTableItemStyle> <FormCaptionStyle CssClass="EditFormHeader"></FormCaptionStyle> <FormMainTableStyle GridLines="None" CellSpacing="0" CellPadding="3" Width="100%" /> <FormTableStyle GridLines="Horizontal" CellSpacing="0" CellPadding="2" CssClass="module" Height="110px" Width="100%" /> <FormTableAlternatingItemStyle Wrap="False"></FormTableAlternatingItemStyle> <FormStyle Height="700px" Width="100%" /> </EditFormSettings> </MasterTableView> </telerik:RadGrid>To give a little background, I have a RadSplitter set up with two panes - one for a RadTreeView and the other for "external content" (using URLs, but they are all internal to the site). The nodes in the tree are setup like this:
The entire TreeView object is setup as an AjaxUpdatedControl which, combined with the Javascript "node.showLoadingStatus()" method (in lieu of a LoadingPanel covering the entire tree), allows the nodes that are configured as ServerSide to appear to behave identically to the ServerSideCallback expanding nodes. This is setup as so:
<telerik:RadAjaxManager runat="server" ID="RadAjaxManager1" EnableAJAX="true"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="trProjects"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="trProjects" /> <telerik:AjaxUpdatedControl ControlID="hvNodeToSelect" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> <ClientEvents OnResponseEnd="ajaxCallback" /> </telerik:RadAjaxManager>When a certain action occurs on the main RadPane (where the "external" content is at - internal pages so XSS is not an issue) the loaded page calls a function called "selectNode" on the parent (which contains the RadSplitter, TreeView, etc.) which looks like this:
//called from child pages to select the associated node function selectNode(parent, child) { var parentNode = treeView.findNodeByValue(parent); setNodeToSelect(child); if (!parentNode.get_expanded()) { if (!parentNode.get_parent().get_expanded()) parentNode.get_parent().expand(); parentNode.expand(); } else { if (parentNode.get_expandMode() != 1) { //Server-side (encapsulated by RadAJAX) var childNode = treeView.findNodeByValue(child); childNode.set_selected(true); nodeToSelect = null; //page-level javascript variable } } }The first thing it does is check to see if the parent node is expanded (all the way through the top-level root node) and expands down. For the purposes of this issue this is the block being called and not the other half (the "else" clause). When I execute the action that fires this the bottom-level child node (one of the database-driven X nodes as referenced above, the parent being the one with the ServerSideCallback expand mode) gets selected which is exactly what I want.
What I've noticed though is once I've utilized the "parentNode.expand();" method on a node that is ServerSide (which the RadAjaxManager makes appear as if no postback occurs) this functionality stops working. To better explain this, inside the method above there is a small function called setNodeToSelect called right at the beginning which looks like this:
function setNodeToSelect(value) { nodeToSelect = value; hvNodeToSelect.value = nodeToSelect; } function trProjects_NodePopulated(sender, args) { var node = args.get_node(); if (nodeToSelect != null) { treeView.findNodeByValue(nodeToSelect).set_selected(true); nodeToSelect = null; } } this.get_element().value=d_registerSelectedNode:function(d){this._insertSortedHierarchicalIndexInArray(d._getHierarchicalIndex(),this._clientState.selectedNodes);<Windows> <telerik:RadWindow ID="GLLookupWindow" runat="server" Behaviors="Close" Width="900" Height="700" OnClientClose="UnhideIframe_OnClientClose"> <ContentTemplate> <asp:Panel runat="server" ID="pnlGLLookup" Visible="true" TabIndex="-1"> <telerik:RadGrid AutoGenerateColumns="False" ID="GLLookup" OnItemCommand ="GLLookup_ItemCommand" AllowFilteringByColumn="true" OnItemCreated="GLLookup_ItemCreated" DataSourceID="SqlDataSourceGLLookupwindow" AllowSorting="true" runat="server" PagerStyle-AlwaysVisible="true" AllowPaging="true" PageSize ="20" > <GroupingSettings CaseSensitive="false" /> <MasterTableView DataKeyNames="GCMGRP,GCACCT,GCSACT,GCDEPT,GCDESC" > <PagerStyle Mode="NumericPages" PageButtonCount="5" /> <Columns> <telerik:GridBoundColumn HeaderText="Major" DataField="GCMGRP" UniqueName="GCMGRP" AllowFiltering="true" SortExpression="GCMGRP" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-VerticalAlign="Bottom" /> <telerik:GridBoundColumn HeaderText="Acct" DataField="GCACCT" UniqueName="GCACCT" AllowFiltering="true" SortExpression="GCACCT" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-VerticalAlign="Bottom" /> <telerik:GridBoundColumn HeaderText="Sub" DataField="GCSACT" UniqueName="GCSACT" AllowFiltering="true" SortExpression="GCSACT" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-VerticalAlign="Bottom" /> <telerik:GridBoundColumn HeaderText="Dept/Loc" DataField="GCDEPT" UniqueName="GCDEPT" AllowFiltering="true" SortExpression="GCDEPT" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-VerticalAlign="Bottom" /> <telerik:GridBoundColumn HeaderText="Description" DataField="GCDESC" UniqueName="GCDESC" AllowFiltering="true" SortExpression="GCDESC" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-VerticalAlign="Bottom" /> </Columns> <ItemStyle Wrap="false" /> <PagerStyle Mode="NumericPages" AlwaysVisible="true"></PagerStyle> </MasterTableView> <ClientSettings EnablePostBackOnRowClick="true" > </ClientSettings> </telerik:RadGrid> </asp:Panel> </ContentTemplate> </telerik:RadWindow></Windows><script type="text/javascript"> function spellCheck() { var spell = $find('<%= splContractSpellCheck.ClientID %>'); spell.startSpellCheck(); } </script> <asp:Button ID="btnContractSpellCheck" runat="server" Text="Spell Check" CssClass="buttonStyle" CausesValidation="False" UseSubmitBehavior="False" OnClientClick="javascript: spellCheck()" /> <telerik:RadSpell ID="splContractSpellCheck" runat="server" ControlsToCheck="txtContractSummary,txtContractPurpose,txtContractComments" ButtonType="None" /> <asp:TextBox ID="txtContractSummary" runat="server" TextMode="MultiLine" MaxLength="1000" Width="100%" Height="34px" Enabled="false" /> <asp:TextBox ID="txtContractPurpose" runat="server" TextMode="MultiLine" MaxLength="1000" Width="100%" Height="86px" Enabled="false" /> <asp:TextBox ID="txtContractComments" runat="server" TextMode="MultiLine" MaxLength="1000" Width="100%" Height="52px" Enabled="false" />