0
votes

I have a page with Radgrid. Everything is ok until i implement a custom filter and set default filter depend on session. i make a tooltip on column header that allow user can choose a item for filter radgrid.

enter image description here

All of columns run nice except "TotalAmount" column. Nothing happens when i click item on tooltip.

enter image description here

Code set default filter when user click item on tooltip (Radgrid_PreRender):

 if (!IsPostBack)
        {
            if (Session["FilterParams"] != null)
            {
                ParamsForGrid prForGrid = new ParamsForGrid();
                Filters filter = new Filters();
                filter = prForGrid.GetFilter();
                rgOrders.MasterTableView.FilterExpression = "([" + filter.columnName + "] LIKE \'%" + filter.searchStrings + "%\') ";
                GridColumn column = rgOrders.MasterTableView.GetColumnSafe(filter.columnName);
                column.CurrentFilterFunction = GridKnownFunction.Contains;
                column.CurrentFilterValue = filter.searchStrings;
                rgOrders.MasterTableView.Rebind();
            }

        }

How to fix it. I use telerik control version 2012.3.1016.35

Update: Picture below show screen after i clicked on tooltip, param had sent to filter of radgrid, when i debug, FilterExpression get a value exactly, radgrid also rebind, but it not filter.

enter image description here

Update 2 "Code Tooltip":

In this page i used 2 RadtooltipManager, one for rows of grid and one for columns header.

Design view:

        <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
    </telerik:RadScriptManager>
    <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server">
    </telerik:RadAjaxLoadingPanel>
    <telerik:RadWindowManager ID="RadWindowManager1" runat="server">
    </telerik:RadWindowManager>

    <telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server">
        <div>
            Keyword:<telerik:RadTextBox ID="rtbSearch" runat="server" Skin="Web20" Width="150px" EmptyMessage="Enter customer name..." ViewStateMode="Enabled"></telerik:RadTextBox>
            <telerik:RadComboBox ID="rcbProvince" Skin="Web20" runat="server" OnDataBound="rcbProvince_DataBound">
            </telerik:RadComboBox>
            Start
        <telerik:RadDatePicker ID="rdpStartDay" runat="server" ShowPopupOnFocus="True"></telerik:RadDatePicker>
            End
        <telerik:RadDatePicker ID="rdpEndDay" runat="server" ShowPopupOnFocus="True"></telerik:RadDatePicker>
            <telerik:RadButton ID="rbSearch" Text="Search" OnClientClicked="checkDate" runat="server" Skin="Web20" OnClick="rbSearch_Click"></telerik:RadButton>
            <div class="blank"></div>
            <div>
                <telerik:RadGrid ID="rgOrders" EnableLinqExpressions="false" AllowPaging="True" runat="server" AllowSorting="True" AllowMultiRowSelection="True" AutoGenerateColumns="False" GridLines="None" OnItemCreated="rgOrders_ItemCreated" OnPreRender="rgOrders_PreRender" OnItemDataBound="rgOrders_ItemDataBound" OnItemCommand="rgOrders_ItemCommand" PageSize="5" Skin="Web20" OnPageIndexChanged="rgOrders_PageIndexChanged" OnSortCommand="rgOrders_SortCommand" OnNeedDataSource="rgOrders_NeedDataSource">
                    <GroupingSettings CaseSensitive="false" />
                    <MasterTableView DataKeyNames="CustomerId" AllowMultiColumnSorting="true" AllowFilteringByColumn="true">
                        <SortExpressions>
                            <telerik:GridSortExpression FieldName="OrderDate" SortOrder="Descending" />
                        </SortExpressions>
                        <CommandItemSettings ExportToPdfText="Export to Pdf" />
                        <Columns>
                            <telerik:GridClientSelectColumn UniqueName="ClientSelectColumn">
                            </telerik:GridClientSelectColumn>
                            <telerik:GridTemplateColumn AllowFiltering="false" HeaderText="No.">
                                <ItemTemplate>
                                    <%# (Container.DataSetIndex+1).ToString() %>
                                </ItemTemplate>
                                <HeaderStyle HorizontalAlign="Center" />
                                <ItemStyle Font-Bold="True" HorizontalAlign="Center" />
                            </telerik:GridTemplateColumn>
                            <telerik:GridTemplateColumn AutoPostBackOnFilter="true" CurrentFilterFunction="Contains" DataField="Name" HeaderText="Customer Name" SortExpression="Name" UniqueName="Name">
                                <ItemTemplate>
                                    <asp:HyperLink ID="targetControl" runat="server" NavigateUrl='<%# Eval("OrderId","UpdateOrders.aspx?OrderId={0}") %>' Text='<%# Eval("Name") %>'></asp:HyperLink>
                                </ItemTemplate>
                            </telerik:GridTemplateColumn>
                            <telerik:GridBoundColumn DataField="OrderId" HeaderText="Order No" CurrentFilterFunction="Contains" AutoPostBackOnFilter="true" UniqueName="OrderID">
                                <HeaderStyle HorizontalAlign="Center" />
                                <ItemStyle Font-Bold="True" HorizontalAlign="Center" />
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn DataField="OrderDate" HeaderText="Order Date" AutoPostBackOnFilter="true" CurrentFilterFunction="Contains" ShowFilterIcon="false" UniqueName="OrderDate">
                                <HeaderStyle HorizontalAlign="Center" />
                                <ItemStyle HorizontalAlign="Center" />
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn DataField="PaymentTypeName" CurrentFilterFunction="Contains" AutoPostBackOnFilter="true" ShowFilterIcon="false" HeaderText="Payment Type" UniqueName="PaymentTypeName">
                                <HeaderStyle HorizontalAlign="Center" />
                                <ItemStyle HorizontalAlign="Center" />
                            </telerik:GridBoundColumn>   
                            <telerik:GridBoundColumn DataField="TotalAmount" DataType="System.String" HeaderText="TotalAmount" CurrentFilterFunction="Contains" AutoPostBackOnFilter="true" ShowFilterIcon="false" UniqueName="TotalAmount">
                                <HeaderStyle HorizontalAlign="Center" />
                                <ItemStyle Font-Bold="True" HorizontalAlign="Center" />
                            </telerik:GridBoundColumn>
                            <telerik:GridTemplateColumn DataField="IsClosed" ShowFilterIcon="false" CurrentFilterFunction="Contains" AutoPostBackOnFilter="true" HeaderText="IsClosed" SortExpression="IsClosed" UniqueName="IsClosed">
                                <ItemTemplate>
                                    <asp:Label ID="Label11" runat="server" Text='<%# Eval("IsClosed") %>'></asp:Label>
                                </ItemTemplate>
                                <HeaderStyle HorizontalAlign="Center" />
                                <ItemStyle Font-Bold="True" HorizontalAlign="Center" />
                            </telerik:GridTemplateColumn>
                            <telerik:GridTemplateColumn HeaderText="#" AllowFiltering="false">
                                <ItemTemplate>
                                    <asp:Button ID="btnXoa" runat="server" CommandArgument='<%# Eval("OrderId") %>' CommandName="DeleteOrder" OnClientClick="if(!confirm('Are you sure to delete?')) return false;" Text="X" />
                                </ItemTemplate>
                                <HeaderStyle HorizontalAlign="Center" />
                                <ItemStyle HorizontalAlign="Center" />
                            </telerik:GridTemplateColumn>
                        </Columns>
                    </MasterTableView>
                    <FilterItemStyle HorizontalAlign="Center" />
                    <PagerStyle HorizontalAlign="Right" PageButtonCount="5" FirstPageText="First" FirstPageToolTip="" LastPageText="Last" LastPageToolTip="" NextPagesToolTip="" NextPageText="Next" NextPageToolTip="" PageSizeLabelText="" PrevPagesToolTip="" PrevPageText=" Previous" PrevPageToolTip="" EnableSEOPaging="True" />
                    <ClientSettings EnableRowHoverStyle="true">
                        <Selecting AllowRowSelect="True"></Selecting>
                    </ClientSettings>
                    <HeaderContextMenu CssClass="GridContextMenu GridContextMenu_Web20" EnableImageSprites="True">
                    </HeaderContextMenu>
                </telerik:RadGrid>
            </div>
            <div class="blank"></div>
            <div class="left">
                <asp:Button ID="btnDelete" runat="server" OnClientClick="if(!confirm('Are you sure to delete?')) return false;" Text="Delete" OnClick="btnDelete_Click" />
                <telerik:RadButton ID="rbtnCLose" runat="server" Text="Close" Skin="Web20" OnClick="rbtnCLose_Click"></telerik:RadButton>
            </div>
        </div>
    </telerik:RadAjaxPanel>
    <telerik:RadToolTipManager ID="RadToolTipManager1" OffsetY="-1" HideEvent="LeaveTargetAndToolTip"
        Width="250" Height="100" runat="server" OnAjaxUpdate="OnAjaxUpdate" RelativeTo="Element"
        Position="MiddleRight">
    </telerik:RadToolTipManager>
    <telerik:RadToolTipManager ID="RadToolTipManager2" ShowDelay="1000" HideDelay="500" OffsetY="-1" HideEvent="ManualClose"
        Width="180" Height="150" runat="server" OnAjaxUpdate="OnAjaxUpdateHeader" RelativeTo="Element"
        Position="TopCenter">
    </telerik:RadToolTipManager>

Code behind:

protected void OnAjaxUpdate(object sender, ToolTipUpdateEventArgs e)
    {
        this.UpdateToolTip(e.Value, e.UpdatePanel);
    }
    protected void OnAjaxUpdateHeader(object sender, ToolTipUpdateEventArgs e)
    {
        this.UpdateToolTipHeader(e.Value, e.UpdatePanel);
    }
    private void UpdateToolTip(string elementID, UpdatePanel panel)
    {
        Control ctrl = Page.LoadControl("controls/CustomerDetails.ascx");
        ctrl.ID = "UcCustomerDetails";
        panel.ContentTemplateContainer.Controls.Add(ctrl);
        controls.CustomerDetails details = (controls.CustomerDetails)ctrl;
        details.CustomerId = elementID;
    }
    private void UpdateToolTipHeader(string elementID, UpdatePanel panel)
    {
        Control ctrl = Page.LoadControl("controls/TooltipCategory.ascx");
        ctrl.ID = "UcTooltipCategory";
        panel.ContentTemplateContainer.Controls.Add(ctrl);
        controls.TooltipCategory details = (controls.TooltipCategory)ctrl;
        details.HeaderText = elementID;
    }

On ItemDatabound of Radgrid:

protected void rgOrders_ItemDataBound(object sender, GridItemEventArgs e)
    {
        if (e.Item.ItemType == GridItemType.Item || e.Item.ItemType == GridItemType.AlternatingItem)
        {
            Control target = e.Item.FindControl("targetControl");
            if (!Object.Equals(target, null))
            {
                if (!Object.Equals(this.RadToolTipManager1, null))
                {
                    this.RadToolTipManager1.TargetControls.Add(target.ClientID, (e.Item as GridDataItem).GetDataKeyValue("CustomerId").ToString(), true);
                }
            }
        }
        else if (e.Item.ItemType == GridItemType.Header)
        {
            GridHeaderItem item = (GridHeaderItem)e.Item;
            if (!Object.Equals(this.RadToolTipManager2, null))
            {
               this.RadToolTipManager2.TargetControls.Add(item.Cells[4].ClientID, "Name", true);
               this.RadToolTipManager2.TargetControls.Add(item.Cells[6].ClientID, "OrderDate", true);
               this.RadToolTipManager2.TargetControls.Add(item.Cells[7].ClientID, "PaymentTypeName", true);
               this.RadToolTipManager2.TargetControls.Add(item.Cells[8].ClientID, "TotalAmount", true);
               this.RadToolTipManager2.TargetControls.Add(item.Cells[9].ClientID, "IsClosed", true);
            }         
        }
    }

My way for this issue is: when user hover on header, i will send text of column header to WebUserControl, it will return a list items with distinct value. After that i set initial Filter and refresh this page to get result. Important : everything is OK , only TotalAmount column not working.

1
Any issue in your code? Please remove IsPostback condition from your code. - Jayesh Goyani
i tried to remove IsPostBack, but it still nothing.Anothers columns run normal. Only TotalAmount column not work. - Nguyễn Huy
Can you please do one favor to me, as you have used usercontrol for tooltip? It would be nice if you will upload your aspx and ascx page with code in one project and share link with us? - Jayesh Goyani

1 Answers

1
votes

Problems solved. i waste a lot of time with it :(.

Problem is 'Like' condition in FilterExpression, it make number column not filter.

rgOrders.MasterTableView.FilterExpression = "([" + filter.columnName + "] LIKE \'%" + filter.searchStrings + "%\') ";

i change code above to:

rgOrders.MasterTableView.FilterExpression = "([" + filter.columnName + "] = \'" + filter.searchStrings + "\') ";

It working nice for both string column and number column.