I am under the gun here and having a weird issue with RadGrid. I am using regular data bind (datasource = , databind()). The grid has some template columns that contain a textbox and a slider. Whenever I got to capture the values of the slider or the textbox on a postback...both return empty. Any ideas on what could be causing this? One note is that not all the rows are displayed upon loading of the grid and I dynamically show them. Here is the page:
I would have preferred to just get the value of the slider instead of having to put the value in the textbox....
<%@ Register Src="~/BusinessModules/Report/EarnedValueReportSection.ascx" TagName="EarnedValueReportSection" TagPrefix="uc1" %><%@ Control Language="vb" AutoEventWireup="false" Inherits="Digisoft.DS.UI.Web.ProgramEarnedValueControl" CodeFile="ProgramEarnedValueControl.ascx.vb" %><script type="text/javascript"> //variables var gridProject; var tableProject; //itit Functions function initProjectGrid(sender,args){ //set gridProject,tableProject gridProject = sender; tableProject = gridProject.get_masterTableView(); } function toggleTreeRows(gridId,rowId,storageId,buttonName) { var rows = tableProject.get_dataItems(); var row; var childRow; var rowVisible = false; var childOpen = false; var parentLineage = ''; var childLineage = ''; var parentLevel = 0; var childLevel = 0; var storageList = ''; var storageCtl = document.getElementById(storageId); var openCloseCtl; for (var i = 0; i < rows.length; i++){ row = rows[i]; openCloseCtl = row.findElement(buttonName); if (parentLineage != '') { childLineage = row.get_element().getAttribute('lineage'); if (childLineage.indexOf(parentLineage) == 0) { childLevel = childLineage.split('/').length; if (childLevel == (parentLevel + 1)){ if (childOpen == 'true'){ //hide child row.get_element().setAttribute('open','false'); if (openCloseCtl.getAttribute("onclick") != null) { openCloseCtl.setAttribute('src',openCloseCtl.getAttribute('src').replace('minus','plus')); } tableProject.hideItem(i); } else { //show child row.get_element().setAttribute('open','true'); if (openCloseCtl.getAttribute("onclick") != null) { openCloseCtl.setAttribute('src',openCloseCtl.getAttribute('src').replace('minus','plus')); } tableProject.showItem(i); } } else { //hide non-first level children row.get_element().setAttribute('open','false'); if (openCloseCtl.getAttribute("onclick") != null) { openCloseCtl.setAttribute('src',openCloseCtl.getAttribute('src').replace('plus','minus')); } tableProject.hideItem(i); } } } if (rowId == row.get_element().getAttribute('lineage')){ parentLineage = row.get_element().getAttribute('lineage'); parentLevel = parentLineage.split('/').length; childOpen = tableProject.get_dataItems()[i + 1].get_element().getAttribute('open'); if (childOpen == 'true'){ openCloseCtl.setAttribute('src',openCloseCtl.getAttribute('src').replace('minus','plus')); } else { openCloseCtl.setAttribute('src',openCloseCtl.getAttribute('src').replace('plus','minus')); } } if (row.get_element().getAttribute('open') == 'true') { storageList += row.get_element().getAttribute('lineage') + ',' } } storageCtl.value = storageList; } function onSliderValueChange(sender, args){ var sliderPercentText; sliderPercentText = document.getElementById(sender.get_element().getAttribute('sliderPercentTxtId')); sliderPercentText.value = sender.get_value(); } function onSliderEnd(sender, args){ var valueArray; var sliderPercentText; var valueParent; var valueChild; var weightChild; var percentChild; var rows; var row; var rowParent; var slider; var sliderParent; var projectId; var projectParentId = ''; var sliderName; var hasChildren; sliderName = sender.get_element().getAttribute('sliderName'); rows = tableProject.get_dataItems(); valueArray = new Array(rows.length - 1); //set the values for projects that do not have children in preparation for rolling up. for (var i = 0; i <= rows.length - 1; i++){ row = rows[i]; slider = row.findControl(sliderName); hasChildren = slider.get_element().getAttribute('sliderHasChildren'); percentChild = slider.get_value(); if (hasChildren == 'false'){ valueArray[i] = (percentChild / 100); } else { valueArray[i] = 0; } } //roll up values for (var i = rows.length - 1; i >= 0; i--){ row = rows[i]; slider = row.findControl(sliderName); projectParentId = slider.get_element().getAttribute('sliderProjectParentId'); percentChild = valueArray[i]; weightChild = slider.get_element().getAttribute('sliderWeight'); if (i !== 0){ for (var x = (i - 1); x >= 0; x--){ rowParent = rows[x]; sliderParent = rowParent.findControl(sliderName); projectId = sliderParent.get_element().getAttribute('sliderProjectId'); if (projectId == projectParentId) { valueArray[x] += (valueArray[i] * weightChild); break; } } } } //set value for projects that have children for (var i = 0; i < rows.length - 1; i++){ row = rows[i]; slider = row.findControl(sliderName); hasChildren = slider.get_element().getAttribute('sliderHasChildren'); sliderPercentText = document.getElementById(slider.get_element().getAttribute('sliderPercentTxtId')); valueArray[i] = (valueArray[i] * 100); if (hasChildren == 'true'){ slider.set_value(valueArray[i].toFixed(0)); sliderPercentText.value = valueArray[i].toFixed(0); } } }</script><style type="text/css" media="all"> input.label { width: 200px; border: none; color: #000000; background-color: transparent; text-align: right; }</style><asp:updatepanel id="DisplayPanel" Visible="False" UpdateMode="Always" Runat="server"> <Triggers> <asp:PostBackTrigger ControlID="CloseBtn" /> </Triggers> <ContentTemplate> <des:DSUpdateProgress ID="UpdateProgress1" AssociatedUpdatePanelID="DisplayPanel" runat="server"> <ProgressTemplate> <div class="ProgressPanel"> </div> <div class="InnerProgressPanel"> <img src="images/ajax-loader.gif" alt="Loading..." /> Loading... </div> </ProgressTemplate> </des:DSUpdateProgress> <table width="100%" cellpadding="0" cellspacing="0"> <tr> <td align="center" class="DisplayPanel"> <telerik:RadSplitter ID="MainSplitter" runat="server" Height="540" Width="100%"> <telerik:RadPane ID="ProjectsPane" Scrolling="Both" Width="25%" PersistScrollPosition="true" runat="server"> <asp:HiddenField ID="ProjectTreeHolder" runat="server" /> <telerik:RadGrid ID="ProjectGrid" runat="server"> <ClientSettings > <Selecting AllowRowSelect="true" /> <Scrolling AllowScroll="false" /> </ClientSettings> <MasterTableView Width="100%" AutoGenerateColumns="false" ClientDataKeyNames="Level,BaseID,StateMode" DataKeyNames="ID" HeaderStyle-Wrap="false"> <Columns> <telerik:GridTemplateColumn HeaderText=" " UniqueName="ProjectColumn" ItemStyle-Wrap="false"> <ItemTemplate> <input type="hidden" id="ID" runat="server" value='<%# DataBinder.Eval(Container,"DataItem.ID")%>' /> <input type="hidden" id="ParentID" runat="server" value='<%# DataBinder.Eval(Container,"DataItem.ParentID")%>' /> <input type="hidden" id="Level" runat="server" value='<%# DataBinder.Eval(Container,"DataItem.Level")%>' /> <input type="hidden" id="Lineage" runat="server" value='<%# DataBinder.Eval(Container,"DataItem.Lineage")%>' /> <input type="hidden" id="HasChildren" runat="server" value='<%# DataBinder.Eval(Container,"DataItem.HasChildren")%>' /> <span style="text-decoration:none;"><%#DataBinder.Eval(Container, "DataItem.Padding")%></span> <asp:Image ID="ProjectOpenCloseImg" runat="server" /> <des:DisableLinkButton ID="ProjectSelectBtn" OnCommand="ProjectSelectBtn_OnCommand" Text='<%# DataBinder.Eval(Container,"DataItem.NameLong")%>' CommandArgument='<%# DataBinder.Eval(Container,"DataItem.ID")%>' CausesValidation="true" runat="server"></des:DisableLinkButton> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridBoundColumn HeaderText="Manager" DataField="Manager.DisplayName" HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left"></telerik:GridBoundColumn> <telerik:GridBoundColumn HeaderText="Start Date" DataFormatString="{0:d}" DataField="StartDate" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center"></telerik:GridBoundColumn> <telerik:GridBoundColumn HeaderText="End Date" DataFormatString="{0:d}" DataField="EndDate" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center"></telerik:GridBoundColumn> <telerik:GridTemplateColumn HeaderText="Active" ItemStyle-Wrap="false" ItemStyle-HorizontalAlign="center"> <ItemTemplate> <asp:Image runat="server" Visible='<%# DataBinder.Eval(Container,"DataItem.IsActive")%>' ID="IsActiveImg" ImageUrl="~/images/check.gif" /> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Child Weight" UniqueName="ChildWeight" ItemStyle-Wrap="false" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center"> <ItemTemplate> <asp:Label ID="ChildWeightLbl" runat="server"></asp:Label>% </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Previous %" UniqueName="PreviousPercent" ItemStyle-Wrap="false" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center"> <ItemTemplate> <asp:Label ID="PercentPreviousLbl" runat="server"></asp:Label>% </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="%" UniqueName="Percent" ItemStyle-Wrap="false" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center"> <ItemTemplate> <asp:TextBox ID="PercentTxt" CssClass="label" Width="30px" runat="server"></asp:TextBox>% </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText=" " UniqueName="PercentSlider" ItemStyle-Wrap="false" HeaderStyle-Width="5px"> <ItemTemplate> <telerik:RadSlider ID="PercentSlider" runat="server"></telerik:RadSlider> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridBoundColumn HeaderText="Budget" DataFormatString="{0:c}" DataField="CalculatedBudgetTotalCost" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center"></telerik:GridBoundColumn> </Columns> </MasterTableView> </telerik:RadGrid> </telerik:RadPane> <telerik:RadSplitBar ID="MainSplitBar" CollapseMode="None" EnableResize="True" runat="server" /> <telerik:RadPane ID="DetailsPane" Scrolling="Both" Width="75%" PersistScrollPosition="true" runat="server"> <uc1:EarnedValueReportSection ID="EarnedValueReportSec" runat="server" /> </telerik:RadPane> </telerik:RadSplitter> </td> </tr> <tr> <td class="TabDisplayFooter" align="right"> <des:disablelinkbutton id="CloseBtn" runat="server" enabledcssclass="CommandButton" disabledcssclass="DisabledCommandButton" Visible="True"></des:disablelinkbutton> </td> </tr> </table> </ContentTemplate></asp:updatepanel>I would have preferred to just get the value of the slider instead of having to put the value in the textbox....