I have a grid with DetailTables which are populated using OnDetailTableDataBind. The headers of the detail table are localized server side because the data is different depending upon the parent. When a row is expanded, the details display with the correct header text. The problem is when I expande another row. That's rows header text displays correctly but the first detail table's header text is now empty for each column. I've tried a few ways to set the text but neither hold their values when an additional row is expanded.
| <telerik:RadGrid ID="rgInvoices" runat="server" GridLines="None" AllowPaging="True" |
| AllowMultiRowSelection="true" ShowStatusBar="true" AllowSorting="True" AutoGenerateColumns="False" |
| GroupingEnabled="False" Skin="CentreTelerikNoSelectStyle" EnableEmbeddedSkins="false" |
| OnNeedDataSource="rgInvoices_NeedDataSource" PageSize="10" OnItemCreated="rgInvoices_ItemCreated" |
| OnItemDataBound="rgInvoices_ItemDataBound" OnDetailTableDataBind="rgInvoices_DetailTableDataBind" |
| HeaderStyle-Font-Bold="true"> |
| <MasterTableView ...> |
| <Columns> |
| ... |
| </Columns> |
| <DetailTables> |
| <telerik:GridTableView Width="100%" AutoGenerateColumns="false"> |
| <Columns> |
| <telerik:GridBoundColumn DataField="Field2"></telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="Field3"></telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="Field4"></telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="Field5"></telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="Field6"></telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="Field7"></telerik:GridBoundColumn> |
| </Columns> |
| </telerik:GridTableView> |
| </DetailTables> |
| </MasterTableView> |
| </telerik:RadGrid> |
| protected void rgInvoices_DetailTableDataBind(object source, Telerik.Web.UI.GridDetailTableDataBindEventArgs e) |
| { |
| var dataItem = (GridDataItem)e.DetailTableView.ParentItem; |
| var invoiceType = |
| (InvoiceType) Enum.Parse(typeof (InvoiceType), dataItem.GetDataKeyValue("InvoiceType").ToString()); |
| CreateServiceDetailHeaders(e.DetailTableView); |
| e.DetailTableView.DataSource = GetInvoiceDetails(invoiceType); |
| } |
| private void CreateServiceDetailHeaders(GridTableView gv) |
| { |
| var item = gv.GetItems(GridItemType.Header); |
| GridHeaderItem headerItem = item[0] as GridHeaderItem; |
| LinkButton button = headerItem["field2"].Controls[0] as LinkButton; |
| button.Text = GetLocalResource("ServiceDescriptionHeader"); |
| //gv.Columns[0].HeaderText = GetLocalResource("ServiceDescriptionHeader"); |
| gv.Columns[1].HeaderText = GetLocalResource("ServiceLaborAmountHeader"); |
| gv.Columns[2].HeaderText = GetLocalResource("ServicePartAmountHeader"); |
| gv.Columns[3].HeaderText = GetLocalResource("ServiceMiscAmountHeader"); |
| gv.Columns[4].Visible = false; |
| gv.Columns[5].Visible = false; |
| gv.Columns[0].HeaderStyle.HorizontalAlign = HorizontalAlign.Left; |
| gv.Columns[0].ItemStyle.HorizontalAlign = HorizontalAlign.Left; |
| gv.Columns[1].HeaderStyle.HorizontalAlign = HorizontalAlign.Right; |
| gv.Columns[1].ItemStyle.HorizontalAlign = HorizontalAlign.Right; |
| gv.Columns[2].HeaderStyle.HorizontalAlign = HorizontalAlign.Right; |
| gv.Columns[2].ItemStyle.HorizontalAlign = HorizontalAlign.Right; |
| gv.Columns[3].HeaderStyle.HorizontalAlign = HorizontalAlign.Right; |
| gv.Columns[3].ItemStyle.HorizontalAlign = HorizontalAlign.Right; |
| } |
Setting the text by getting the LinkButton or by assigning to the HeaderText property of the column work for the row that was just expanded but any other detail tables that were already expanded lose these values.
Any help is greatly appreciated.
Thanks,
Dave
<div class="settings"> <h1>Media Libraries</h1> <div> <fieldset style="width: 250px;"> <legend>Choose a Site</legend> <telerik:RadComboBox ID="ddlSite" runat="server" Width="200px" Height="100px" AutoPostBack="true" EmptyMessage="Select a Site" EnableVirtualScrolling="true" OnSelectedIndexChanged="ddlSite_SelectedIndexChanged"> </telerik:RadComboBox> </fieldset> </div> <div> <fieldset style="width: 250px;"> <legend>Selected Site</legend> <asp:Label ID="lblSiteName" runat="server" Text=""></asp:Label> </fieldset> </div> </div> <table cellspacing="4" cellpadding="0" border="0" style="padding-left:10px;" > <tr> <td style="vertical-align: top;"> <telerik:RadFileExplorer runat="server" ID="FileExplorer1" Width="1000px" Height="500px" OnClientItemSelected="OnClientItemSelected" > </telerik:RadFileExplorer> </td> <td valign="top"> <fieldset style="width: 230px; height: 220px"> <legend>Preview</legend> <img id="pvwImage" src="" runat="server" alt="" style="display: none; max-width:230px; max-height:220px; margin: 10px; vertical-align: middle;" /> </fieldset> </td> </tr> </table>.cs page: protected void Page_Load(object sender, EventArgs e) { InitializeContainer(); //set properties according to configuration panel FileExplorer1.VisibleControls = GetVisibleControls(); FileExplorer1.EnableOpenFile = true; FileExplorer1.DisplayUpFolderItem = true; FileExplorer1.AllowPaging = true; FileExplorer1.EnableCreateNewFolder = true; FileExplorer1.Upload.Enabled = true; //if (!enableUpload.Checked) //{ // FileExplorer1.Configuration.UploadPaths = new string[0]; //} if (!IsPostBack) { BindSite(); lblSiteName.Text = ddlSite.SelectedItem.Text; ////Set initial folder to open. Note that the path is case sensitive! FileExplorer1.Configuration.ContentProviderTypeName = typeof(CustomColumnsContentProvider).AssemblyQualifiedName; //FileExplorer1.InitialPath = Page.ResolveUrl(String.Format("~/SiteData/{0}/UserFiles/allowed.png",this.SiteID)); this.SiteID = Convert.ToInt32(ddlSite.SelectedValue); string PagePath = Page.ResolveUrl(String.Format("~/SiteData/{0}/UserFiles/allowed.png", this.SiteID)); string RootPagePath = Page.ResolveUrl(String.Format("~/SiteData/{0}/UserFiles", this.SiteID)); //Set initial folder to open. Note that the path is case sensitive! // FileExplorer1.InitialPath = PagePath; FileExplorer1.Configuration.ViewPaths = new string[] { RootPagePath }; FileExplorer1.Configuration.UploadPaths = new string[] { RootPagePath }; FileExplorer1.Configuration.DeletePaths = new string[] { RootPagePath }; } AddDateAndTypeColumns(); } protected void ddlSite_SelectedIndexChanged(object sender, EventArgs e) { lblSiteName.Text = ddlSite.SelectedItem.Text; this.SiteID = Convert.ToInt32(ddlSite.SelectedValue); string RootPagePath = Page.ResolveUrl(String.Format("~/SiteData/{0}/UserFiles", this.SiteID)); //Set initial folder to open. Note that the path is case sensitive! // FileExplorer1.InitialPath = PagePath; FileExplorer1.Configuration.ViewPaths = new string[] { RootPagePath }; FileExplorer1.Configuration.UploadPaths = new string[] { RootPagePath }; FileExplorer1.Configuration.DeletePaths = new string[] { RootPagePath }; }
Thanks in advance for your help.... 