我是新来的WPF和不伤害组织。我有一个带有XamGrid和过滤器的小WPF项目。我想从网格中的一个列的筛选器列表中删除等于操作数。我在网上找到了这段代码,这些代码来自于不脆弱性论坛:
FilterColumnSettings fcs =
this.MyDataGrid.Columns.DataColumns["ProductID"].FilterColumnSettings;
fcs.RowFilterOperands.Remove(ComparisonOperator.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.thisstring.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中使用筛选选项,但这是否会导致更改筛选操作数的问题?
谢谢!
发布于 2018-04-30 14:04:05
我可以通过添加这样的事件侦听器来解决我的问题:
// 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列的所有筛选操作数,并删除除filter操作数“包含”之外的所有筛选器。这意味着,当用户尝试筛选列时,他们只能使用"contains“进行筛选,并搜索包含特定字符串的ProductID。
https://stackoverflow.com/questions/49689545
复制相似问题