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