从 XamGrid 过滤器中删除操作数
Removing operand from XamGrid Filter
我是 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: 'Object reference not set to an instance of an object.'
Infragistics.Controls.Grids.ReadOnlyKeyedColumnBaseCollection.this[string].get returned null.
为了克服这个错误,我遵循了这个 link 的解决方案: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 中的过滤选项,但这是否会导致我更改过滤器操作数时出现问题?
谢谢!
我能够通过像这样添加一个事件侦听器来解决我的问题:
// 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 列的所有过滤器操作数,并删除除过滤器操作数 "contains" 之外的所有过滤器。
这意味着当用户尝试过滤该列时,他们只能使用 "contains" 进行过滤并搜索包含特定字符串的 ProductID。
我是 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: 'Object reference not set to an instance of an object.' Infragistics.Controls.Grids.ReadOnlyKeyedColumnBaseCollection.this[string].get returned null.
为了克服这个错误,我遵循了这个 link 的解决方案: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 中的过滤选项,但这是否会导致我更改过滤器操作数时出现问题?
谢谢!
我能够通过像这样添加一个事件侦听器来解决我的问题:
// 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 列的所有过滤器操作数,并删除除过滤器操作数 "contains" 之外的所有过滤器。 这意味着当用户尝试过滤该列时,他们只能使用 "contains" 进行过滤并搜索包含特定字符串的 ProductID。