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

RadGrid show or hide filter on RadPanelBar click.

1 Answer 89 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Zaher
Top achievements
Rank 1
Zaher asked on 04 Sep 2015, 01:51 PM

Hi I have a RadGrid that is inside of a UserControl, and is used inside of an aspx page that contains a RadPanelBar.  When the user clicks the RadPanlBar buttons the gird is displayed.  I have to use a filter on my grid, but I only want the filter to display if a certain RadPanelBar button is clicked.  I have the following code in my RadPanlBar ItemClick event.

protected void CategoriesPanelBar_ItemClick(object sender, RadPanelBarEventArgs e)
    {
        e.Item.Selected = true;
        if (e.Item.Expanded || e.Item.Items.Count == 0)
        {
            // This is a leaf we select the parent and this child only
            if (e.Item.Items.Count == 0)
            {
                createDiscountGridControl.SelectedParentCategory = ((RadPanelItem)e.Item.Parent).Value;
                createDiscountGridControl.SelectedCategory = e.Item.Value;
            }
            else
            {
                createDiscountGridControl.SelectedParentCategory = e.Item.Value;
                createDiscountGridControl.SelectedCategory = null;
            }
            createDiscountGridControl.Rebind();
            //createFilter(int.Parse(e.Item.Value)); 
            if (e.Item.Value == "319")
            {
                Controls.DiscountGrid userControl = createDiscountGridControl;

                var rg = ((RadGrid)userControl.FindControl("RadGridDiscounts"));

                GridColumn column = rg.MasterTableView.GetColumnSafe("ProductName");
                column.CurrentFilterFunction = GridKnownFunction.Contains;
                column.CurrentFilterValue = "Product_Name";
                rg.AllowFilteringByColumn = true;

                rg.MasterTableView.Rebind(); 

            }
        }
    }

 

This line is the button that when clicked should show the grid.  

 

if (e.Item.Value == "319")

 

I'm getting a null reference exception on the line 

GridColumn column = rg.MasterTableView.GetColumnSafe("ProductName");

 

column is coming back null.  It's like it can't find the column inside of the Grid.  Here is the code for my RadGrid UserControl.  The column in question has a unique name of ProductName.

 

​​​​<telerik:RadGrid ID="RadGridDiscounts" runat="server" ShowStatusBar="true" 
         AllowFilteringByColumn="true" AllowMultiRowSelection="false" AutoGenerateColumns="false" 
        OnNeedDataSource="RadGridDiscounts_NeedDataSource" OnPreRender="RadGridDiscounts_PreRender"
        OnItemDataBound="RadGridDiscounts_ItemDataBound" Skin="Web20" ClientSettings-AllowExpandCollapse="true" OnInit="RadGridDiscounts_Init" OnDetailTableDataBind="RadGridDiscounts_DetailTableDataBind" OnItemCreated="RadGridDiscounts_ItemCreated">
        <PagerStyle Mode="NumericPages" />

        <MasterTableView DataKeyNames="Category_ID" AllowMultiColumnSorting="true" HierarchyLoadMode="Client" DataMember="Categories">

            <DetailTables>

                <telerik:GridTableView DataKeyNames="Product_ID" Name="Products" HierarchyLoadMode="Client" DataMember="Products">
                    <ColumnGroups>
                        <telerik:GridColumnGroup HeaderText="Parent" Name="Parent" HeaderStyle-HorizontalAlign="Center"></telerik:GridColumnGroup>
                        <telerik:GridColumnGroup HeaderText="Account" Name="Discount" HeaderStyle-HorizontalAlign="Center"></telerik:GridColumnGroup>
                        <telerik:GridColumnGroup HeaderText="Margin" Name="Margin" HeaderStyle-HorizontalAlign="Center"></telerik:GridColumnGroup>
                    </ColumnGroups>

                    <ParentTableRelation>
                        <telerik:GridRelationFields DetailKeyField="Category_ID" MasterKeyField="Category_ID" />
                    </ParentTableRelation>

                    <%--Detail Table For Second Spiff--%>
                    <DetailTables>
                        <telerik:GridTableView HierarchyLoadMode="Client" Name="SecondSpiffs" DataMember="SecondSpiffs" runat="server" >
                            <ParentTableRelation>
                                <telerik:GridRelationFields DetailKeyField="SpiffProductID" MasterKeyField="Product_ID"></telerik:GridRelationFields>
                            </ParentTableRelation>
                            <Columns>
                                <telerik:GridBoundColumn UniqueName="SpiffSplitProductID" HeaderText="Spiff Product ID" DataField="SpiffSplitProductID"></telerik:GridBoundColumn>
                                
                                <telerik:GridBoundColumn HeaderText="Spiff Product Name" DataField="SpiffProductName" UniqueName="Attribute" AllowFiltering="true">                                   
                                </telerik:GridBoundColumn>
                                <telerik:GridTemplateColumn HeaderText="Lock Discount" UniqueName="LockDiscount" AllowFiltering="false">
                                    <ItemTemplate>
                                        <asp:CheckBox ID="chkLockDiscount" runat="server" Checked='<%# Eval("Lock_Discount") %>'/>
                                    </ItemTemplate>
                                </telerik:GridTemplateColumn>
                                <telerik:GridTemplateColumn HeaderText="Approved To Sell" AllowFiltering="false">
                                    <ItemTemplate>
                                        <asp:CheckBox ID="chkStatus" runat="server" Checked='<%# Eval("ApprovedToSell_Flg") %>'/>
                                    </ItemTemplate>
                                </telerik:GridTemplateColumn>
                                <telerik:GridTemplateColumn HeaderText="Parent Spiff" AllowFiltering="false">
                                    <ItemTemplate>
                                        <asp:Label ID="ParentSpiff" runat="server" Text='<%# Eval("ParentSpiffAmount") %>'></asp:Label>
                                    </ItemTemplate>
                                </telerik:GridTemplateColumn>
                                <telerik:GridTemplateColumn HeaderText="Discount" AllowFiltering="false">
                                    <ItemTemplate>
                                        <asp:TextBox ID="ChildSpiff" runat="server" Columns="7" Text='<%# Eval("ChildSpiffAmount") %>' ></asp:TextBox>
                                    </ItemTemplate>
                                </telerik:GridTemplateColumn>
                                <telerik:GridTemplateColumn Display="false">
                                    <ItemTemplate>
                                        <asp:Label id="SpiffOrder" runat="server" Text='<%# Eval("Order") %>'></asp:Label>
                                    </ItemTemplate>
                                </telerik:GridTemplateColumn>
                                <telerik:GridBoundColumn UniqueName="SpiffSplitMappingID" Display="false" DataField="SpiffSplitMappingID" />
                                <telerik:GridBoundColumn UniqueName="SpiffProductID" Display="false" DataField="SpiffProductID" />
                                <telerik:GridBoundColumn UniqueName="SpiffSplitID" Display="false" DataField="SpiffSplitID" />
                                <telerik:GridCheckBoxColumn DataField="Lock_Discount" UniqueName="hfDiscountLock" Display="false" />
                            </Columns>
                        </telerik:GridTableView>
                    </DetailTables>

                    <Columns>

                        <telerik:GridBoundColumn SortExpression="Product_ID" HeaderText="Product ID" DataField="Product_ID" AllowFiltering="false" />
                        
                        <%--<telerik:GridBoundColumn SortExpression="Product_Name" HeaderText="Product Name" DataField="Product_Name" UniqueName="ProductName" AllowFiltering="true" CurrentFilterFunction="Contains" ShowFilterIcon="true" AutoPostBackOnFilter="true">
                                                                       
                        </telerik:GridBoundColumn>--%>      
                        <telerik:GridBoundColumn SortExpression="Product_Name" HeaderText="Product Name" DataField="Product_Name" UniqueName="ProductName">
                                                                       
                        </telerik:GridBoundColumn>                  

                        <telerik:GridTemplateColumn HeaderText="Approved To Sell" AllowFiltering="false">
                            <ItemTemplate>
                                <asp:CheckBox ID="chkApprovedToSell" runat="server" Checked='<%# CheckApprovedToSellFlag(Container.DataItem) %>' />
                            </ItemTemplate>
                        </telerik:GridTemplateColumn>

                        <telerik:GridTemplateColumn HeaderText="Lock Discount" UniqueName="LockDiscount" AllowFiltering="false">
                            <ItemTemplate>
                                <asp:CheckBox ID="chkLockDiscount" runat="server" Checked='<%# Eval("Lock_Discount") %>' />
                            </ItemTemplate>
                        </telerik:GridTemplateColumn>

                        <telerik:GridTemplateColumn HeaderText="Discount" ColumnGroupName="Parent" ItemStyle-Width="120px" AllowFiltering="false">
                            <ItemTemplate>
                                <asp:Label ID="txtParentDiscount" runat="server" Text='<%# DiscountFormat(Container.DataItem, "parent") %>'>
                                </asp:Label>
                            </ItemTemplate>
                        </telerik:GridTemplateColumn>

                        <telerik:GridTemplateColumn HeaderText="Price" ColumnGroupName="Parent" ItemStyle-Width="120px" AllowFiltering="false">
                            <ItemTemplate>
                                <asp:Label ID="txtParentPrice" runat="server" Text='<%# FinalPriceFormat(Container.DataItem, "parent") %>'>
                                </asp:Label>
                            </ItemTemplate>
                        </telerik:GridTemplateColumn>

                        <telerik:GridTemplateColumn HeaderText="Discount" ColumnGroupName="Discount" ItemStyle-Width="120px" AllowFiltering="false">
                            <ItemTemplate>
                                <asp:TextBox ID="txtAccountDiscount" runat="server" Text='<%# DiscountFormat(Container.DataItem, "account") %>' Width="80%"></asp:TextBox>
                                <asp:Label ID="lblNewProduct" runat="server" Font-Bold="true" ForeColor="Red"  Font-Size="Large"></asp:Label>
                            </ItemTemplate>
                        </telerik:GridTemplateColumn>

                        <telerik:GridTemplateColumn HeaderText="Price" ColumnGroupName="Discount" ItemStyle-Width="120px" AllowFiltering="false">
                            <ItemTemplate>
                                <asp:TextBox ID="txtAccountPrice" runat="server" Text='<%# FinalPriceFormat(Container.DataItem, "account") %>' Width="80%" Enabled="<%# PriceEnable(Container.DataItem) %>"></asp:TextBox>
                            </ItemTemplate>
                        </telerik:GridTemplateColumn>

                        <telerik:GridTemplateColumn HeaderText="Discount" UniqueName="Margin" ColumnGroupName="Margin" ItemStyle-Width="120px" AllowFiltering="false">
                            <ItemTemplate>
                                <asp:Label ID="txtMargin" runat="server" Text='<%# DiscountFormat(Container.DataItem, "margin") %>'></asp:Label>
                            </ItemTemplate>
                        </telerik:GridTemplateColumn>

                        <telerik:GridTemplateColumn HeaderText="Amount" ColumnGroupName="Margin" ItemStyle-Width="120px" AllowFiltering="false">
                            <ItemTemplate>
                                <asp:Label ID="txtMarginPrice" runat="server" Text='<%# FinalPriceFormat(Container.DataItem, "margin") %>'></asp:Label>
                            </ItemTemplate>
                        </telerik:GridTemplateColumn>

                        <telerik:GridTemplateColumn HeaderText="Discount Type" AllowFiltering="false">
                            <ItemTemplate>                                                
                                <asp:RadioButton ID="rbDollar"  runat="server" Text="$" GroupName="DiscountType" AutoPostBack="false" Checked='<%#CheckDollarDiscountType(Container.DataItem)%>' Enabled="false"/>                                      
                                <asp:RadioButton ID="rbPercent" runat="server" Text="%" GroupName="DiscountType" AutoPostBack="false" Checked='<%#CheckPercentDiscountType(Container.DataItem)%>' Enabled="false"/>                                             
                                <asp:HiddenField ID="hfProductID" runat="server" Value='<%# Eval("Product_ID") %>' />
                                <asp:HiddenField ID="hfDiscountLock" runat="server" Value='<%# Eval("Lock_Discount") %>' />
                                <asp:HiddenField ID="hfBasePrice" runat="server" Value='<%# Eval("Base_Price") %>' />
                            </ItemTemplate>
                        </telerik:GridTemplateColumn>

                    </Columns>

                </telerik:GridTableView>
            </DetailTables>
            <Columns>
                <telerik:GridBoundColumn SortExpression="Parent_ID" HeaderText="Parent_ID" DataField="Parent_ID" Visible="false"></telerik:GridBoundColumn>
                <telerik:GridBoundColumn SortExpression="Category_Name" HeaderText="Category" HeaderButtonType="TextButton" DataField="Category_Name" Visible="false"></telerik:GridBoundColumn>
                <telerik:GridBoundColumn SortExpression="Carrier_Name" HeaderText="Product Category" HeaderButtonType="TextButton" DataField="Carrier_Name" AllowFiltering="false"></telerik:GridBoundColumn>
                <telerik:GridTemplateColumn HeaderText="Parent Discount" Visible="true" AllowFiltering="false">
                    <ItemTemplate>
                        <asp:label ID="lblCarrierParentAccountDiscount" runat="server" Text="" />
                    </ItemTemplate>
                </telerik:GridTemplateColumn>
                <telerik:GridTemplateColumn HeaderText="Apply Approved To Sell To All" Visible="true" AllowFiltering="false">
                    <ItemTemplate>
                        <asp:CheckBox ID="chkCarrierApprovedToSell" runat="server" Text="" />
                    </ItemTemplate>
                </telerik:GridTemplateColumn>
                <telerik:GridTemplateColumn HeaderText="Discount" Visible="true" AllowFiltering="false">
                    <ItemTemplate>
                        <asp:TextBox ID="txtCarrierAccountDiscount" runat="server"></asp:TextBox>
                        <asp:Label ID="txtCarrierNewProduct" runat="server" BorderStyle="None" Font-Bold="true" ForeColor="Red"  Font-Size="Large"></asp:Label>
                    </ItemTemplate>
                </telerik:GridTemplateColumn>
            </Columns>
        </MasterTableView> 
        <ClientSettings>
            
        </ClientSettings>    

    </telerik:RadGrid>

1 Answer, 1 is accepted

Sort by
0
Viktor Tachev
Telerik team
answered on 09 Sep 2015, 11:23 AM
Hello Zaher,

In order to hide the filter row for RadGrid when a given item in the RadPanelBar is selected you can use client-side logic. You should handle the OnClientItemClicked event for the RadPanelBar. In the handler you can check what is the selected item and if necessary hide the filter row in RadGrid.


function itemClicked(sender, args) {
    var grid = $find("<%= RadGrid1.ClientID%>");
 
    if (args.get_item().get_text() == "some text") {
        $telerik.$(grid.get_element()).find(".rgFilterRow").hide();
    } else {
        $telerik.$(grid.get_element()).find(".rgFilterRow").show();
    }
 
}


Regards,
Viktor Tachev
Telerik
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items
Tags
Grid
Asked by
Zaher
Top achievements
Rank 1
Answers by
Viktor Tachev
Telerik team
Share this question
or