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;),但效果不佳。

有没有一种方法可以使用此方法获取所有行?

WPF-RadGridView在行中循环.可以';t get all row

你试过这个吗?

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;
        }