I am attempting to use a hierarchical grid and am having a number of issues with the ExpandColumn. I want to hid the auto-generated expand column placed in the first column of all levels and add a formatted image for the expand column in the last column. I have managed the last requirement by placing a GridButtonColumn with a Command handler to expand/collaspe the parent grid item. This works, sort of.
The bigger problem comes when expanding the second level table. I used the examples provided for others for hiding the expandcolumn in the first column and that seems to work until I expand the grid. Then the expandcolumn for the first level is shown - moving the second level over by 250px. (which is the size of the first grids first data column). I can see that the code to hide the expandcolumns is the last thing running - as expected as it is called from the grid's PreRender event.
It may help to show some code:
Here is the grid:
Here is the code run from the statusGrid-PreRender:
and attached is a screen shot of the expanded grid:
Any help is greatly appreciated.
David
The bigger problem comes when expanding the second level table. I used the examples provided for others for hiding the expandcolumn in the first column and that seems to work until I expand the grid. Then the expandcolumn for the first level is shown - moving the second level over by 250px. (which is the size of the first grids first data column). I can see that the code to hide the expandcolumns is the last thing running - as expected as it is called from the grid's PreRender event.
It may help to show some code:
Here is the grid:
<telerik:RadGrid ID="statusGrid" runat="server" EnableViewState="false" AllowPaging="false" AllowSorting="false" |
OnNeedDataSource="statusGrid_NeedDataSource" OnItemCreated="statusGrid_ItemCreated" |
OnDetailTableDataBind="statusGrid_DetailTableDataBind" OnPreRender="statusGrid_PreRender" |
AutoGenerateColumns="false" AllowMultiRowSelection="false" Width="98%" OnItemCommand="statusGrid_ItemCommand"> |
<MasterTableView EnableViewState="false" EnableNoRecordsTemplate="true" GridLines="None" |
AllowFilteringByColumn="false" ShowHeader="false" ShowFooter="false" |
DataKeyNames="StatusID" HorizontalAlign="Right" Width="100%" Name="Status" |
HierarchyLoadMode="ServerOnDemand" HierarchyDefaultExpanded="false" > |
<NoRecordsTemplate> |
No Patients or Forms available. |
</NoRecordsTemplate> |
<ItemStyle BackColor="#CDE3DD" /> |
<Columns> |
<telerik:GridTemplateColumn> |
<ItemStyle HorizontalAlign="Left" Width="250px" CssClass="statusInfo" /> |
<ItemTemplate> |
<asp:Label ID="status" runat="server" /> |
</ItemTemplate> |
</telerik:GridTemplateColumn> |
<telerik:GridTemplateColumn> |
<ItemStyle Width="350px" BorderStyle="None" /> |
<ItemTemplate> |
|
</ItemTemplate> |
</telerik:GridTemplateColumn> |
<telerik:GridTemplateColumn> |
<ItemStyle HorizontalAlign="Right" Width="250px" CssClass="statusItem" /> |
<ItemTemplate> |
<asp:Label ID="patientCount" runat="server" /> |
</ItemTemplate> |
</telerik:GridTemplateColumn> |
<telerik:GridButtonColumn UniqueName="levelOne" ButtonType="ImageButton" CommandName="Expand" ImageUrl="../images/header_menu.gif" > |
<ItemStyle HorizontalAlign="Right" CssClass="statusButton" /> |
</telerik:GridButtonColumn> |
</Columns> |
<DetailTables> |
<telerik:GridTableView DataKeyNames="PatientID" EnableViewState="false" AllowSorting="false" |
AllowPaging="true" PageSize="5" OnDataBound="patientGrid_DataBound" Name="Patients" > |
<ParentTableRelation> |
<telerik:GridRelationFields DetailKeyField="StatusID" MasterKeyField="StatusID" /> |
</ParentTableRelation> |
<Columns> |
<telerik:GridTemplateColumn> |
<ItemStyle HorizontalAlign="Left" Width="250px"/> |
<ItemTemplate> |
<asp:Label ID="patient" runat="server" /> |
</ItemTemplate> |
</telerik:GridTemplateColumn> |
<telerik:GridTemplateColumn> |
<ItemStyle HorizontalAlign="Right" Width="250px"/> |
<ItemTemplate> |
<asp:Label ID="formCount" runat="server" /> |
</ItemTemplate> |
</telerik:GridTemplateColumn> |
<telerik:GridExpandColumn UniqueName="levelTwo" CollapseImageUrl="../images/expand.jpg" ExpandImageUrl="../images/expand.jpg" > |
<HeaderStyle HorizontalAlign="Right" Width="10px" /> |
</telerik:GridExpandColumn> |
</Columns> |
<DetailTables> |
<telerik:GridTableView DataKeyNames="FormID" EnableViewState="false" |
AllowPaging="true" PageSize="20" OnDataBound="formGrid_DataBound" Name="Forms" > |
<ParentTableRelation> |
<telerik:GridRelationFields DetailKeyField="PatientID" MasterKeyField="PatientID" /> |
</ParentTableRelation> |
<HeaderStyle CssClass="listItem" /> |
<ItemStyle CssClass="listItem" /> |
<Columns> |
<telerik:GridButtonColumn HeaderText="Form Name" DataTextField="SurveyName" SortExpression="SurveyName" ButtonType="LinkButton"> |
<ItemStyle ForeColor="#1A3F62" Font-Bold="false" Font-Underline="false" /> |
</telerik:GridButtonColumn> |
<telerik:GridBoundColumn DataField="PatientInitials" HeaderText="Patient Initials" SortExpression="PatientInitials" ReadOnly="true" /> |
<telerik:GridBoundColumn DataField="Comment" HeaderText="Comment" SortExpression="Comment" ReadOnly="true" /> |
<telerik:GridBoundColumn DataField="VisitName" HeaderText="Visit Name" SortExpression="VisitName" ReadOnly="true" /> |
<telerik:GridDateTimeColumn DataField="LastChange" HeaderText="Last Change" SortExpression="LastChange" ReadOnly="true" /> |
<telerik:GridBoundColumn DataField="ChangedBy" HeaderText="Changed By" SortExpression="ChangedBy" ReadOnly="true" /> |
</Columns> |
</telerik:GridTableView> |
</DetailTables> |
</telerik:GridTableView> |
</DetailTables> |
</MasterTableView> |
</telerik:RadGrid> |
Here is the code run from the statusGrid-PreRender:
/// <summary> |
/// Hides the expand column recursively. |
/// </summary> |
/// <param name="view">The view.</param> |
private void HideExpandColumnRecursive( GridTableView view ) |
{ |
GridItem[] nestedViewItems = view.GetItems( GridItemType.NestedView ); |
foreach ( GridNestedViewItem nestedViewItem in nestedViewItems ) |
{ |
foreach ( GridTableView nestedView in nestedViewItem.NestedTableViews ) |
{ |
if ( nestedView.Items.Count == 0 ) |
{ |
nestedViewItem.Visible = false; |
TableCell cell = nestedView.ParentItem["ExpandColumn"]; |
cell.Visible = false; |
cell.Controls[0].Visible = false; |
} |
if ( nestedView.HasDetailTables ) |
{ |
HideExpandColumnRecursive( nestedView ); |
} |
} |
} |
} |
and attached is a screen shot of the expanded grid:
Any help is greatly appreciated.
David