2014-10-27 39 views
0

我有一个Radgrid的页面。一切都可以,直到我实现了一个自定义过滤器并根据会话设置默认过滤器。我在列标题上做了一个工具提示,允许用户选择滤波器radgrid的项目。Radgrid Telerik默认过滤器错误,列号

enter image description here

所有列的运行除 “总金额” 列好的。当我点击工具提示上的项目时没有任何反应。

enter image description here

代码设置默认过滤器时,在工具提示(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(); 
      } 

     } 

如何解决此问题。我使用Telerik的控件版本2012.3.1016.35

更新:下面的图片显示屏幕后,我点击工具提示,PARAM曾派人到radgrid控件的过滤器,当我调试,FilterExpression得到一个确切值,radgrid控件还重新绑定,但它不过滤。

enter image description here

更新2 “代码工具提示”:

在这个页面我用2 RadtooltipManager,一个用于网格的行和一列的标题。

设计视图:

 <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> 

后面的代码:

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; 
    } 

在radgrid控件的ItemDataBound:

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); 
      }   
     } 
    } 

我对这个问题的办法是:在头当用户将鼠标悬停,我将发送列标题的文本到WebUserControl,它会返回列出具有不同价值的项目。之后,我设置初始过滤器并刷新此页面以获得结果。 重要:一切正常,只有TotalAmount列无法正常工作。

+0

在您的代码中的任何问题? 请从您的代码中删除IsPostback条件 – 2014-10-27 19:20:49

+0

我试图删除IsPostBack,但它仍然没有。其他的列运行正常。只有TotalAmount列不起作用。 – 2014-10-28 01:15:36

+0

你可以请你帮我一个忙,因为你已经使用usercontrol的工具提示?如果您将一个项目中的代码上传到aspx和ascx页面并与我们分享链接,那将会很好吗? – 2014-10-29 18:33:57

回答

1

已解决的问题。我浪费了大量的时间与它:(

问题是“喜欢”在FilterExpression条件下,使数列不能过滤

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

我改变上面的代码:。

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

它适用于字符串列和数字列