This is a migrated thread and some comments may be shown as answers.

Self-referencing hierarchy -- child column headers show when no child rows exist

2 Answers 145 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Matt
Top achievements
Rank 1
Matt asked on 21 Jan 2011, 05:09 PM
Why do each of the items in a self-referencing hierarchy grid have child columns displayed -- even when there are no children for the item?  (Note:  I *do* want a row columns displayed if there are child items, just not displayed when there are *no* children.)

I'm implementing a radgrid in 508 mode where the child row column headers are displayed (along with the main column headers).  What I want displayed is as follows:

Parent Column 1  |  Parent Column 2  |  Parent Column 3
Parent row ............
Child Column 1  |  Child Column 2  |  Child Column 3
Child row .............
Child Column 1  |  Child Column 2  |  Child Column 3
Child row .............

However, when there's only one child, the following is displayed:

Parent Column 1  |  Parent Column 2  |  Parent Column 3
Parent row ............
Child Column 1  |  Child Column 2  |  Child Column 3
Child row .............
Child Column 1  |  Child Column 2  |  Child Column 3

As you can see, the Child Column headers are showing up childCount + 1 times (if there are no children, a child header row appears anyway).

I've tried hiding the column headers on the ItemCreated event, but haven't been successful.

Here's the code definition corresponding to the grid:

<telerik:RadGrid ID="grdNotes" runat="server" OnColumnCreated="grdNotes_ColumnCreated"
    OnItemCreated="grdNotes_ItemCreated" OnItemDataBound="grdNotes_ItemDataBound"
    OnNeedDataSource="grdNotes_NeedDataSource"
    OnPreRender="grdNotes_PreRender" AutoGenerateColumns="False"
    SkinID="HierarchicalGrid" GridLines="None" AllowCustomPaging="True"
    ShowStatusBar="True" PageSize="20" Width="100%"
    EnableLinqExpressions="False">
    <HeaderContextMenu EnableTheming="True">
        <CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation>
    </HeaderContextMenu>
    <ClientSettings Selecting-AllowRowSelect="true" Resizing-AllowColumnResize="true">
<Selecting AllowRowSelect="True"></Selecting>
 
        <ClientEvents OnRowSelected="NoteRowSelected" OnRowContextMenu="NoteContextMenu"
            OnRowDblClick="grdNotes_OnRowDblClick" OnColumnResized="ResizeAllNoteColumns"
            OnGridCreated="NotePageLoad" />
 
<Resizing AllowColumnResize="True"></Resizing>
    </ClientSettings>
    <PagerStyle Position="Bottom" AlwaysVisible="True" Mode="NextPrevAndNumeric" Wrap="False"
        BackColor="White" Font-Size="Large" />
    <MasterTableView HierarchyDefaultExpanded="true" HierarchyLoadMode="Client" AllowSorting="true"
        DataKeyNames="Id,ParentId,Token,IsRoot,Replies,NoteCreator" ClientDataKeyNames="Id,ParentId,Token,IsRoot,Replies,NoteCreator"
        NoDetailRecordsText="" EnbleNoRecordsTemplate="True" Width="100%">
        <SelfHierarchySettings ParentKeyName="ParentId" KeyName="Id" MaximumDepth="20" />
<CommandItemSettings ExportToPdfText="Export to Pdf"></CommandItemSettings>
        <Columns>
            <telerik:GridClientSelectColumn DataTextField="Id" HeaderAbbr="Select"
                HeaderButtonType="TextButton" HeaderText="Select"
                HeaderTooltip="Select/Deselect" Text="Select" Visible="false" UniqueName="asgSelect"
                HeaderStyle-Width="7%">
<HeaderStyle Width="7%"></HeaderStyle>
            </telerik:GridClientSelectColumn>
            <telerik:GridBoundColumn DataField="Id" HeaderText="Id" SortExpression="Id"
                UniqueName="Id" HeaderStyle-Width="5%" >
<HeaderStyle Width="5%"></HeaderStyle>
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="Title" HeaderText="Title" SortExpression="Title"
                UniqueName="Title" HeaderStyle-Width="20%" >
<HeaderStyle Width="20%"></HeaderStyle>
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="Body" HeaderText="Body" SortExpression="Body"
                UniqueName="Body" HeaderStyle-Width="37%" >
<HeaderStyle Width="37%"></HeaderStyle>
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="CreatedBy" HeaderText="Created By" SortExpression="CreatedBy"
                UniqueName="CreatedBy" HeaderStyle-Width="10%" >
<HeaderStyle Width="10%"></HeaderStyle>
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="CreatedDate" HeaderText="Created On" SortExpression="CreatedDate"
                UniqueName="CreatedOn" HeaderStyle-Width="10%" >
<HeaderStyle Width="10%"></HeaderStyle>
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="ParentId" HeaderText="Parent Id" SortExpression="ParentId"
                UniqueName="ParentId" Visible="false" />
            <telerik:GridBoundColumn DataField="Token" HeaderText="Token" SortExpression="Token"
                UniqueName="Token" Visible="false" />
            <telerik:GridBoundColumn DataField="IsRoot" HeaderText="IsRoot" SortExpression="IsRoot"
                UniqueName="IsRoot" Visible="false" />
            <telerik:GridBoundColumn DataField="Replies" HeaderText="Replies" SortExpression="Replies"
                UniqueName="Replies" Visible="false" />
            <telerik:GridBoundColumn DataField="NoteCreator" HeaderText="NoteCreator" SortExpression="NoteCreator"
                UniqueName="NoteCreator" Visible="false" />
            <telerik:GridTemplateColumn UniqueName="Actions" HeaderStyle-Width="15%" HeaderText="Actions"
                Visible="false">
                <ItemTemplate>
                    <telerik:RadToolBar ID="rtbNoteActions" runat="server" SkinID="ActionToolbar"
                        OnButtonClick="NotesGridToolbarButtonClicked" OnClientButtonClicking="NoteActionToolbarClicking">
                        <Items>
                            <telerik:RadToolBarButton Text="Properties" CommandName="Properties" ImageUrl="~/Images/page_view.gif" />
                            <telerik:RadToolBarButton Text="Reply" CommandName="Reply" ImageUrl="~/Images/page_edit.gif" />
                            <telerik:RadToolBarButton Text="Security" CommandName="Security" ImageUrl="~/Images/shield16.gif" />
                            <telerik:RadToolBarButton Text="Delete" CommandName="Delete" ImageUrl="~/Images/delete16.gif" />
                        </Items>
                    </telerik:RadToolBar>
                </ItemTemplate>
 
<HeaderStyle Width="15%"></HeaderStyle>
            </telerik:GridTemplateColumn>
        </Columns>
 
<PagerStyle AlwaysVisible="True"></PagerStyle>
    </MasterTableView>
    <FilterMenu EnableTheming="True">
        <CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation>
    </FilterMenu>
</telerik:RadGrid>


The code behind for the ItemCreated is as follows:

protected void grdNotes_ItemCreated(object sender, GridItemEventArgs e)
 {
     CreateExpandCollapseButton(e.Item, "Id");
 
     if (e.Item is GridHeaderItem && e.Item.OwnerTableView != grdNotes.MasterTableView)
     {
         if (!CachedApplicationData.UseAssistiveTechnology)
         {
             e.Item.Style["display"] = "none";
         }
     }
 
     if (e.Item is GridNestedViewItem)
     {
         e.Item.Cells[0].Visible = false;
         e.Item.Cells[1].Style.Add(HtmlTextWriterStyle.Padding, "0px");
     }
 }

2 Answers, 1 is accepted

Sort by
0
Princy
Top achievements
Rank 2
answered on 24 Jan 2011, 09:59 AM
Hello Matt,

Try the following code snippet in PreRender event to hide the column headers when no record exist in child table.

C#:
protected void RadGrid1_PreRender(object sender, EventArgs e)
   {
        foreach(GridDataItem item in RadGrid1.Items)
         {
            if (item.Expanded)
           {
               GridTableView tableView = (GridTableView)item.ChildItem.NestedTableViews[0];
               if (tableView.Items.Count == 0)
               {
                   GridHeaderItem headeritem = (GridHeaderItem)tableView.GetItems(GridItemType.Header)[0];
                   headeritem.Display = false;
                }
           }
       }
   }

Thanks,
Princy.
0
Matt
Top achievements
Rank 1
answered on 24 Jan 2011, 06:50 PM
Awesome...thank you!
Tags
Grid
Asked by
Matt
Top achievements
Rank 1
Answers by
Princy
Top achievements
Rank 2
Matt
Top achievements
Rank 1
Share this question
or