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

HideExpandColumnRecursive with RadComboBox Filters

1 Answer 94 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Timothy Kruszewski
Top achievements
Rank 1
Timothy Kruszewski asked on 07 Feb 2011, 05:34 PM
I have a Radgrid control on a page that users a master/detail table to display data. In this scenario not every master record will have a detail record so I don't want to display the No Record line item.  This all works fine on the initial load of the page and grid, see image 1.  When a user selects a filter such a Region or Client is when I start having problems, see image 2.  All of the details rows are now displayed even it there is not data.  I've tried several of the code examples online but can't seem to get them working with the filters.

<telerik:RadGrid ID="rgVendors" runat="server" Skin="Web20" DataSourceID="edsVendors" 
                    ShowStatusBar="true" AutoGenerateColumns="False" AllowSorting="True" AllowMultiRowSelection="False"
                    AllowPaging="True" AllowAutomaticDeletes="true" GridLines="None" PageSize="25"
                    SortingSettings-EnableSkinSortStyles="false" OnDetailTableDataBind="rgVendors_DetailTableDataBind"
                    OnItemCommand="rgVendors_ItemCommand" OnItemEvent="rgVendors_ItemEvent" OnItemDataBound="rgVendors_ItemDataBound"
                    OnDeleteCommand="rgVendors_DeleteCommand" OnSelectedIndexChanged="rgVendors_SelectedIndexChanged"
                    OnPreRender="rgVendors_PreRender">
                    <MasterTableView DataKeyNames="ClientID,VendorID,VendorDetailID" Name="rgMaster" HierarchyLoadMode="ServerBind"
                        HierarchyDefaultExpanded="true" HeaderStyle-BackColor="#7FA5D7" ItemStyle-BackColor="#B0C4DE"
                        AlternatingItemStyle-BackColor="White">
                        <Columns>
                            <telerik:GridButtonColumn Text="Select" UniqueName="Select" CommandName="Select">
                            </telerik:GridButtonColumn>
                            <telerik:GridBoundColumn DataField="VendorDetailID" ReadOnly="true" Visible="false"
                                UniqueName="VendorDetailID">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn DataField="Client.ClientID" ReadOnly="true" UniqueName="ClientID"
                                Visible="false">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn HeaderText="Client Name" DataField="Client.ClientName" UniqueName="ClientName"
                                HeaderStyle-Width="100px" ReadOnly="true">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn HeaderText="Vendor Name" DataField="Vendor.VendorName" UniqueName="VendorName"
                                ReadOnly="true">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn HeaderText="Service Provided" DataField="VendorService.ServiceName"
                                UniqueName="ServiceName" ReadOnly="true">
                            </telerik:GridBoundColumn>
                            <telerik:GridTemplateColumn HeaderText="Address" HeaderStyle-Width="150px">
                                <ItemTemplate>
                                    <asp:Label ID="Address" runat="server" Text='<%# Eval("Vendor.Address") %>'></asp:Label><br />
                                    <asp:Label ID="City" runat="server" Text='<%# Eval("Vendor.City") %>'></asp:Label><br />
                                    <asp:Label ID="State" runat="server" Text='<%# Eval("Vendor.State") %>'></asp:Label><br />
                                    <asp:Label ID="Zip" runat="server" Text='<%# Eval("Vendor.Zip") %>'></asp:Label>
                                </ItemTemplate>
                            </telerik:GridTemplateColumn>
                            <telerik:GridTemplateColumn HeaderText="Phone<br>Email<br>Website" HeaderStyle-Width="100px">
                                <ItemTemplate>
                                    <asp:Label ID="Phone" runat="server" Text='<%# Eval("Vendor.Phone") %>'></asp:Label>
                                    <br />
                                    <asp:Label ID="Email" runat="server"><a href='mailto:<%# DataBinder.Eval(Container.DataItem, "Vendor.Email")%>'><%# DataBinder.Eval(Container.DataItem, "Vendor.Email")%></a></asp:Label>
                                    <br />
                                    <asp:HyperLink ID="hlWebsite" runat="server" NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "Vendor.WebSite")%>'
                                        Text='<%# DataBinder.Eval(Container.DataItem, "Vendor.WebSite")%>' Target="_blank"></asp:HyperLink>
                                </ItemTemplate>
                            </telerik:GridTemplateColumn>
                            <telerik:GridTemplateColumn HeaderText="Notes">
                                <ItemTemplate>
                                    <asp:Label ID="Notes" runat="server" Text='<%# Eval("Vendor.Notes") %>'></asp:Label>
                                </ItemTemplate>
                            </telerik:GridTemplateColumn>
                            <telerik:GridButtonColumn ConfirmText="Delete this Client Vendor?" ConfirmDialogType="RadWindow"
                                ConfirmTitle="Delete" ButtonType="ImageButton" ImageUrl="..\Icons\close.gif"
                                CommandName="Delete" />
                        </Columns>
                        <DetailTables>
                            <telerik:GridTableView DataKeyNames="VendorID,VendorContactID" Name="rgDetail" Width="100%"
                                runat="server" ItemStyle-BackColor="#6288C2" AlternatingItemStyle-BackColor="#6288C2"
                                AllowAutomaticDeletes="true">
                                <Columns>
                                    <telerik:GridButtonColumn Text="Edit Contact" UniqueName="Select" CommandName="Select">
                                    </telerik:GridButtonColumn>
                                    <telerik:GridBoundColumn DataField="VendorContactID" ReadOnly="true" UniqueName="ClientID"
                                        Visible="false">
                                    </telerik:GridBoundColumn>
                                    <telerik:GridTemplateColumn HeaderText="Contact Name">
                                        <ItemTemplate>
                                            <asp:Label ID="ContactName" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
                                        </ItemTemplate>
                                    </telerik:GridTemplateColumn>
                                    <telerik:GridTemplateColumn HeaderText="Address" HeaderStyle-Width="150px">
                                        <ItemTemplate>
                                            <asp:Label ID="Address" runat="server" Text='<%# Eval("Address") %>'></asp:Label><br />
                                            <asp:Label ID="City" runat="server" Text='<%# Eval("City") %>'></asp:Label><br />
                                            <asp:Label ID="State" runat="server" Text='<%# Eval("State") %>'></asp:Label><br />
                                            <asp:Label ID="Zip" runat="server" Text='<%# Eval("Zip") %>'></asp:Label>
                                        </ItemTemplate>
                                    </telerik:GridTemplateColumn>
                                    <telerik:GridTemplateColumn HeaderText="Phone">
                                        <ItemTemplate>
                                            <asp:Label ID="Phone" runat="server" Text='<%# Eval("Phone") %>'></asp:Label>
                                        </ItemTemplate>
                                    </telerik:GridTemplateColumn>
                                    <telerik:GridTemplateColumn HeaderText="Email<br>Website" HeaderStyle-Width="100px">
                                        <ItemTemplate>
                                            <asp:Label ID="Email" runat="server"><a href='mailto:<%# DataBinder.Eval(Container.DataItem, "Email")%>'><%# DataBinder.Eval(Container.DataItem, "Email")%></a></asp:Label>
                                            <br />
                                            <asp:HyperLink ID="hlWebsite" runat="server" NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "WebSite")%>'
                                                Text='<%# DataBinder.Eval(Container.DataItem, "WebSite")%>' Target="_blank"></asp:HyperLink>
                                        </ItemTemplate>
                                    </telerik:GridTemplateColumn>
                                    <telerik:GridTemplateColumn HeaderText="Notes">
                                        <ItemTemplate>
                                            <asp:Label ID="Notes" runat="server" Text='<%# Eval("Notes") %>'></asp:Label>
                                        </ItemTemplate>
                                    </telerik:GridTemplateColumn>
                                    <telerik:GridButtonColumn ConfirmText="Delete this Vendor Contact?" ConfirmDialogType="RadWindow"
                                        ConfirmTitle="Delete" ButtonType="ImageButton" ImageUrl="..\Icons\close.gif"
                                        CommandName="Delete" />
                                </Columns>
                            </telerik:GridTableView>
                        </DetailTables>
                    </MasterTableView>
                    <ExportSettings ExportOnlyData="true" IgnorePaging="true" OpenInNewWindow="true"
                        HideStructureColumns="true" Pdf-PageBottomMargin=".5" Pdf-PageTopMargin=".5"
                        Pdf-PageLeftMargin=".5" Pdf-PageRightMargin=".5" Pdf-PaperSize="Legal" Pdf-PageWidth="356mm"
                        Pdf-PageHeight="216mm" />
                    <PagerStyle Position="TopAndBottom" />
                </telerik:RadGrid>
                <asp:EntityDataSource ID="edsVendors" runat="server" ConnectionString="name=ProNetData"
                    DefaultContainerName="ProNetData" EnableDelete="true" EnableUpdate="False" EntitySetName="VendorDetails"
                    AutoGenerateWhereClause="false" Include="Vendor,VendorService,Client,RiskAssessment"
                    Where="(it.Client.ClientID = @ClientID or @ClientID is null)
                            and (it.Vendor.VendorID = @VendorID or @VendorID is null)
                            and (it.VendorService.VendorServiceID = @VendorServiceID or @VendorServiceID is null)  
                            and (it.Client.RegionID = @RegionID or @RegionID is null)                         
                            and (it.RiskAssessment.IsCurrent = true)" OrderBy="it.Client.ClientName">
                    <WhereParameters>
                        <asp:ControlParameter ControlID="ddlRegionFilter" Name="RegionID" DbType="Int32"
                            ConvertEmptyStringToNull="true" />
                        <asp:ControlParameter ControlID="ddlClientNameFilter" Name="ClientID" Type="Int32"
                            ConvertEmptyStringToNull="true" />
                        <asp:ControlParameter ControlID="ddlVendorNameFilter" Name="VendorID" Type="Int32"
                            ConvertEmptyStringToNull="true" />
                        <asp:ControlParameter ControlID="ddlServiceNameFilter" Name="VendorServiceID" Type="Int32"
                            ConvertEmptyStringToNull="true" />
                    </WhereParameters>
                </asp:EntityDataSource>

protected void rgVendors_DetailTableDataBind(object source, Telerik.Web.UI.GridDetailTableDataBindEventArgs e)
   {
       GridDataItem dataItem = e.DetailTableView.ParentItem;
       int vendorID = int.Parse(dataItem.GetDataKeyValue("VendorID").ToString());
       int clientID = int.Parse(dataItem.GetDataKeyValue("ClientID").ToString());
       using (ProNetData d = new ProNetData())
       {
           var contacts = (from c in d.VendorContacts
                           where c.VendorID == vendorID && c.ClientID == clientID
                           select new
                           {
                               VendorID = c.VendorID,
                               VendorContactID = c.VendorContactID,
                               Name = c.Name,
                               Address = c.Address,
                               City = c.City,
                               State = c.State,
                               Zip = c.Zip,
                               Phone = c.Phone,
                               Email = c.Email,
                               Website = c.Website,
                               Notes = c.Notes
                           }).ToList();
           e.DetailTableView.DataSource = contacts;
       }
   }

protected void rgVendors_ItemCommand(object source, Telerik.Web.UI.GridCommandEventArgs e)
   {
       if (e.CommandName == RadGrid.ExpandCollapseCommandName)
       {
           foreach (GridItem item in e.Item.OwnerTableView.Items)
           {
               if (item.Expanded && item != e.Item)
               {
                   item.Expanded = false;
               }
           }
       }
   }

protected void rgVendors_PreRender(object sender, EventArgs e)
    {
        HideExpandColumnRecursive(rgVendors.MasterTableView);
  
    }
  
  
    public void HideExpandColumnRecursive(GridTableView tableView)
    {
        GridItem[] nestedViewItems = tableView.GetItems(GridItemType.NestedView);
        foreach (GridNestedViewItem nestedViewItem in nestedViewItems)
        {
            foreach (GridTableView nestedView in nestedViewItem.NestedTableViews)
            {
                if (nestedView.Items.Count == 0)
                {
                    nestedView.ParentItem.Expanded = false;
                }
  
                else
                {
                    nestedView.ParentItem.Expanded = true;
                }
            }
        }      
    }

1 Answer, 1 is accepted

Sort by
0
Pavlina
Telerik team
answered on 10 Feb 2011, 02:29 PM
Hi Timothy,

Please have a look at the following help article which elaborates on this subject:
Hiding expand/collapse images when no records

Give it a try and let me know if it helps to resolve the problem.

Best wishes,
Pavlina
the Telerik team
Browse the vast support resources we have to jump start your development with RadControls for ASP.NET AJAX. See how to integrate our AJAX controls seamlessly in SharePoint 2007/2010 visiting our common SharePoint portal.
Tags
Grid
Asked by
Timothy Kruszewski
Top achievements
Rank 1
Answers by
Pavlina
Telerik team
Share this question
or