从XamGrid筛选器中删除操作数

时间:2018-04-06 09:25:30

标签: c# wpf infragistics xamgrid

我是WPF和Infragistics的新手。我有一个带有XamGrid和过滤器的小型WPF项目。我想从筛选器列表中删除网格中其中一列的等号操作数。我从Infragistics论坛在线发现了这段代码:

FilterColumnSettings fcs = 
this.MyDataGrid.Columns.DataColumns["ProductID"].FilterColumnSettings;
fcs.RowFilterOperands.Remove(ComparisonOperator.Equals);

应该这样做,但我无法让它发挥作用。当我的应用程序加载时,equals过滤器选项仍然存在。 我是从错误的地方调用代码吗?这就是我写的:

public MainWindow()
    {
        InitializeComponent();
        FilterColumnSettings fcs = this.xamGrid.Columns.DataColumns["ProductID"].FilterColumnSettings;
        fcs.RowFilterOperands.Remove(ComparisonOperator.Equals);
    }

这是我的XAML代码中的XamGrid:

<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.this [string] .get返回null。

为了克服这个错误,我按照这个链接的解决方案:https://www.infragistics.com/community/forums/f/retired-products-and-controls/29815/allowfilterrow-top-infragistics-silverlight-requireemptyconstructorexception,对我有用的解决方案如下:

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中使用过滤选项,但是这可能会导致我更改过滤器操作数的问题吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我能够通过添加如下事件监听器来解决我的问题:

// Raise event for filter operands
this.xamGrid.PopulatingColumnFilters += new EventHandler<PopulatingFiltersEventArgs>(XamGrid_PopulatingColumnFilters);

此事件处理程序链接到一个方法,其中我有以下代码:

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列的所有过滤器操作数,并删除除过滤器操作数&#34; contains&#34;之外的所有过滤器。 这意味着当用户尝试过滤列时,他们只能使用&#34; contains&#34;并搜索包含特定字符串的ProductID。