You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Telerik RadGrid列表头添加下拉列表筛选器

实现RadGrid列筛选控件改为带唯一值的下拉菜单

完全可以实现这个需求,以下是两种常用的实现方案:


方案1:通过数据源控件绑定唯一筛选值

  1. 先添加一个用于获取Group列唯一值的数据源控件,通过SQL语句去重:
<asp:SqlDataSource ID="SqlDataSourceGroupFilter" runat="server" 
    ConnectionString="<%$ ConnectionStrings:YourConnString %>"
    SelectCommand="SELECT DISTINCT [Group] FROM YourTableName ORDER BY [Group]">
</asp:SqlDataSource>
  1. 修改原GridBoundColumn,配置筛选控件为下拉列表并绑定上述数据源:
<telerik:GridBoundColumn ColumnGroupName="Class" DataField="Group" HeaderText="Group" UniqueName="Group" ReadOnly="true"
    HeaderStyle-Width="180px" FilterControlWidth="70%" AutoPostBackOnFilter="true" 
    FilterControlType="DropDownList" 
    FilterControlDataSourceID="SqlDataSourceGroupFilter"
    FilterControlDataTextField="Group"
    FilterControlDataValueField="Group"
    CurrentFilterFunction="EqualTo" />
  • FilterControlType="DropDownList":将筛选控件从文本框切换为下拉菜单
  • FilterControlDataSourceID:指定提供唯一筛选值的数据源
  • FilterControlDataTextField/FilterControlDataValueField:设置下拉框的显示字段与绑定字段
  • 把CurrentFilterFunction改为EqualTo,适配下拉框的精确筛选逻辑

方案2:后台代码动态绑定唯一筛选值

如果需要更灵活的逻辑(比如从业务层获取数据),可以通过后台代码绑定:

  1. 保持GridBoundColumn基础配置,添加FilterControlType="DropDownList":
<telerik:GridBoundColumn ColumnGroupName="Class" DataField="Group" HeaderText="Group" UniqueName="Group" ReadOnly="true"
    HeaderStyle-Width="180px" FilterControlWidth="70%" AutoPostBackOnFilter="true" 
    FilterControlType="DropDownList"
    CurrentFilterFunction="EqualTo" />
  1. 在RadGrid的PreRender事件中,获取筛选下拉框并绑定唯一值:
protected void RadGrid1_PreRender(object sender, EventArgs e)
{
    GridColumn groupColumn = RadGrid1.MasterTableView.GetColumn("Group");
    if (groupColumn != null)
    {
        RadDropDownList filterDropDown = groupColumn.FilterControl as RadDropDownList;
        if (filterDropDown != null && !filterDropDown.IsBound)
        {
            // 从主数据源提取唯一Group值(也可从业务逻辑层获取)
            DataView dv = SqlDataSource1.Select(DataSourceSelectArguments.Empty) as DataView;
            DataTable distinctGroups = dv.ToTable(true, "Group");
            distinctGroups.DefaultView.Sort = "Group ASC";
            
            // 绑定到下拉框
            filterDropDown.DataSource = distinctGroups;
            filterDropDown.DataTextField = "Group";
            filterDropDown.DataValueField = "Group";
            filterDropDown.DataBind();
            
            // 可选:添加"全部"选项
            filterDropDown.Items.Insert(0, new RadComboBoxItem("全部", ""));
        }
    }
}
  • 需在RadGrid标签中添加OnPreRender="RadGrid1_PreRender"事件绑定

注意事项

  • 两种方案都需确保筛选值唯一:SQL用DISTINCT,DataTable用ToTable(true, "Group")实现去重
  • 你使用的Batch编辑模式与当前筛选配置兼容,AutoPostBackOnFilter="true"不会影响编辑状态
  • 若需支持空值筛选,可在数据源中额外添加空值选项

内容的提问来源于stack exchange,提问作者Axeltherabbit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:17:55