WPF-RadGridView在行中循环.可以';t get all row
本文关键字:get all row 循环 可以 WPF-RadGridView | 更新日期: 2023-09-27 18:24:03
我正在尝试迭代RadGridView行,但当我有20或30个以上的项时,循环不会得到所有行。
例如:在有5个项目的radgridview中使用此代码,我可以获得所有项目并做任何我想做的事情,但当我的网格有20多个项目时,它只得到10行。这是虫子还是类似的东西?我该如何解决?
这是我的代码:
private List<object> ReturnListFounds(string text)
{
List<object> a = new List<object>();
foreach (var item in myGrid.Items)
{
if (item == null)
continue;
GridViewRow row = myGrid.ItemContainerGenerator.ContainerFromItem(item) as GridViewRow;
if (row == null)
continue;
foreach (GridViewCell cell in row.Cells)
{
if (cell != null && cell.Value != null)
{
string str = cell.Value.ToString();
if (str.Equals(text, StringComparison.InvariantCultureIgnoreCase) || str.ToLower().Contains(text.ToLower()))
{
a.Add(row.Item);
break;
}
}
}
}
return a;
}
@编辑
我发现了问题。问题是:如果项在视图区域之外,方法"ItemContainerGenerator.ContainerFromItem(项)as GridViewRow"将返回null。但我在一个包含123个项目的网格中使用这个方法,并且我只能获得第一个20个项目的行。我需要能够获得所有的项目,而不仅仅是视图区域中的项目。我已经尝试将虚拟化设置为false(EnableRowVirtualization=false;EnableColumnVirtualization=false;),但效果不佳。
有没有一种方法可以使用此方法获取所有行?
你试过这个吗?
var rows = StrategyGridView.ChildrenOfType<GridViewRow>();
它对我很有效。希望它能帮助我!
我尝试了很多方法来实现这一点,但我找到了一个。这不是最好的方法,但它有效。我有任何更好的东西,只要在这里张贴!与我们分享!
private List<object> ReturnListFounds(string text)
{
List<object> result = new List<object>();
for (int l = 0; l <= Items.Count; l++)
{
var cell = new GridViewCellInfo(this.Items[l], this.Columns[0], this);
if (cell.Item != null)
{
var props = cell.Item.GetType().GetProperties();
foreach (var p in props)
{
if (p == null || cell.Item == null)
continue;
var t = p.GetValue(cell.Item);
if (t == null)
continue;
var str = t.ToString();
if (str.Equals(text, StringComparison.InvariantCultureIgnoreCase) || str.ToLower().Contains(text))
{
result.Add(cell.Item);
}
}
}
}
result = new List<object>(result.Distinct());
return result;
}