首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从XamGrid滤波器中移除操作数

从XamGrid滤波器中移除操作数
EN

Stack Overflow用户
提问于 2018-04-06 09:25:29
回答 1查看 475关注 0票数 1

我是新来的WPF和不伤害组织。我有一个带有XamGrid和过滤器的小WPF项目。我想从网格中的一个列的筛选器列表中删除等于操作数。我在网上找到了这段代码,这些代码来自于不脆弱性论坛:

代码语言:javascript
复制
FilterColumnSettings fcs = 
this.MyDataGrid.Columns.DataColumns["ProductID"].FilterColumnSettings;
fcs.RowFilterOperands.Remove(ComparisonOperator.Equals);

本来就是这么做的,但我不能让它起作用。当我的应用程序加载时,相等过滤器选项仍然存在。我是不是打错了密码?这就是我所写的:

代码语言:javascript
复制
public MainWindow()
    {
        InitializeComponent();
        FilterColumnSettings fcs = this.xamGrid.Columns.DataColumns["ProductID"].FilterColumnSettings;
        fcs.RowFilterOperands.Remove(ComparisonOperator.Equals);
    }

这是我在XAML代码中的XamGrid:

代码语言:javascript
复制
<ig:XamGrid 
        x:Name="xamGrid" 
        ItemsSource="{Binding}" 
        ColumnWidth="*" 
        AutoGenerateColumns="False" >

        <ig:XamGrid.FilteringSettings>
            <ig:FilteringSettings AllowFiltering="FilterRowTop" />
        </ig:XamGrid.FilteringSettings>

        <ig:XamGrid.Columns>
            <ig:TextColumn Key="ProductID" HeaderText="Product ID" />
        </ig:XamGrid.Columns>
</ig:XamGrid> 

任何帮助都将不胜感激!

编辑:当我添加过滤器时,我一直收到以下错误:

System.NullReferenceException:“对象引用未设置为对象的实例。”Infragistics.Controls.Grids.ReadOnlyKeyedColumnBaseCollection.thisstring.get返回null。

为了克服这个错误,我遵循了这个链接中的解决方案:https://www.infragistics.com/community/forums/f/retired-products-and-controls/29815/allowfilterrow-top-infragistics-silverlight-requireemptyconstructorexception和为我工作的解决方案如下:

代码语言:javascript
复制
this.xamGrid.DataObjectRequested += new EventHandler<DataObjectCreationEventArgs>(xamGrid_DataObjectRequested);

public void xamGrid_DataObjectRequested(object sender, DataObjectCreationEventArgs e)
    {
        if (e.ObjectType == typeof(DataRowView))
        {
            DataTable dt = new DataTable();
            DataRow r = dt.NewRow();
            dt.Rows.Add(r);
            DataRowView drv = dt.DefaultView[dt.Rows.IndexOf(r)];
            e.NewObject = drv;
        }
    }

这允许我在XamGrid中使用筛选选项,但这是否会导致更改筛选操作数的问题?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-30 14:04:05

我可以通过添加这样的事件侦听器来解决我的问题:

代码语言:javascript
复制
// Raise event for filter operands
this.xamGrid.PopulatingColumnFilters += new EventHandler<PopulatingFiltersEventArgs>(XamGrid_PopulatingColumnFilters);

此事件处理程序链接到我有以下代码的方法:

代码语言:javascript
复制
FilterColumnSettings fcs = this.xamGrid.Columns.DataColumns["ProductID"].FilterColumnSettings;
foreach (var fil in fcs.RowFilterOperands.ToList())
{
    // Remove the filters that do no equal "contains"
    if (fil.ComparisonOperatorValue != ComparisonOperator.Contains)
    {
       fcs.RowFilterOperands.Remove(fil);
    }
}

此代码遍历ProductID列的所有筛选操作数,并删除除filter操作数“包含”之外的所有筛选器。这意味着,当用户尝试筛选列时,他们只能使用"contains“进行筛选,并搜索包含特定字符串的ProductID。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49689545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档