C# ObjectListView';s TreeListView单元格编辑速度非常慢

C# ObjectListView';s TreeListView单元格编辑速度非常慢,c#,treeview,objectlistview,C#,Treeview,Objectlistview,我正在使用一个TreeListView(ObjectListView)——并用许多项填充它双击用户输入时,我使其中一列可编辑不幸的是,编辑速度非常慢,从数量列中的一个单元格编辑(见下图)到下一个单元格编辑每次大约需要5-10秒。此外,单元格编辑器的出现和消失也需要一段时间下面是我用来填充TreeListView的代码: TreeListView.TreeRenderer renderer = this.treeListView.TreeColumnRenderer;

我正在使用一个TreeListView(ObjectListView)——并用许多项填充它

双击用户输入时,我使其中一列可编辑

不幸的是,编辑速度非常慢,从数量列中的一个单元格编辑(见下图)到下一个单元格编辑每次大约需要5-10秒。此外,单元格编辑器的出现和消失也需要一段时间

下面是我用来填充TreeListView的代码:

        TreeListView.TreeRenderer renderer = this.treeListView.TreeColumnRenderer;
        renderer.LinePen = new Pen(Color.Firebrick, 0.5f);
        renderer.LinePen.DashStyle = DashStyle.Solid;
        renderer.IsShowLines = true;

        treeListView.RowFormatter = delegate(OLVListItem olvi)
        {
            var item = (IListView)olvi.RowObject;
            if (item.ItemType == "RM")
                olvi.ForeColor = Color.LightSeaGreen;
        };

        treeListView.CanExpandGetter = delegate(object x)
        {
            var job = x as IListView;
            if (job != null)
            {
                if (job.ItemType == "PA" || job.ItemType == "JC")
                {
                     var rm = job.ItemPart.GetRawMaterial();
                    var subParts = job.ItemPart.SubParts.Where(v => v != null).ToList();
                    if (rm.Count > 0|| subParts.Count > 0)//
                        return true;


                }


            }

                return false;
        };


        this.treeListView.ChildrenGetter = delegate(object x)
        {
            try
            {
                var job = x as IListView;
                if (job != null)
                {
                    if (job.ItemType == "PA" || job.ItemType == "JC")
                    {
                        var part = job.ItemPart;
                        var rm = part.GetRawMaterial();
                        var subParts = part.SubParts.Where(v => v != null).ToList();
                        var items = new List<IListView>();

                        items.AddRange(subParts.GetRange(0, subParts.Count).ToList<IListView>());
                        items.AddRange(rm.GetRange(0, rm.Count).ToList<IListView>());
                        return items;
                    }

                }
                return null;

            }
            catch (UnauthorizedAccessException ex)
            {
                MessageBox.Show(this, ex.Message, "ObjectListViewDemo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return null;
            }
        };
        var lItems= jobs.ToList<IListView>();
        treeListView.SetObjects(lItems );


        Expand(lItems[0]);
        treeListView.RebuildAll(true);

    }

    public void Expand(object expItem)
    {
       treeListView.ToggleExpansion(expItem);

        foreach (var item in treeListView.GetChildren(expItem))
        {
            Expand(item);
        }

    }
TreeListView.TreeRenderer renderer=this.TreeListView.TreeColumnRenderer;
renderer.LinePen=新笔(Color.Firebrick,0.5f);
renderer.LinePen.DashStyle=DashStyle.Solid;
renderer.IsShowLines=true;
treeListView.RowFormatter=委托(OLVListItem olvi)
{
var item=(IListView)olvi.RowObject;
如果(item.ItemType==“RM”)
olvi.ForeColor=Color.LightSeaGreen;
};
treeListView.CanExpandGetter=委托(对象x)
{
var job=x作为IListView;
如果(作业!=null)
{
if(job.ItemType==“PA”| | job.ItemType==“JC”)
{
var rm=job.ItemPart.GetRawMaterial();
var subParts=job.ItemPart.subParts.Where(v=>v!=null.ToList();
如果(rm.Count>0 | |子部分计数>0)//
返回true;
}
}
返回false;
};
this.treeListView.ChildrenGetter=委托(对象x)
{
尝试
{
var job=x作为IListView;
如果(作业!=null)
{
if(job.ItemType==“PA”| | job.ItemType==“JC”)
{
var part=job.ItemPart;
var rm=part.GetRawMaterial();
var subParts=part.subParts.Where(v=>v!=null).ToList();
var items=新列表();
items.AddRange(subParts.GetRange(0,subParts.Count.ToList());
items.AddRange(rm.GetRange(0,rm.Count.ToList());
退货项目;
}
}
返回null;
}
捕获(未经授权的访问例外)
{
Show(例如消息“ObjectListViewDemo”、MessageBoxButtons.OK、MessageBoxIcon.感叹号);
返回null;
}
};
var lItems=jobs.ToList();
SetObjects(lItems);
展开(lItems[0]);
treeListView.RebuildAll(true);
}
公共void扩展(对象扩展项)
{
treeListView.ToggleExpansion(expItem);
foreach(treeListView.GetChildren(expItem)中的var项)
{
扩大(项目);
}
}

以下是单元格编辑的图片:


为什么编辑速度这么慢?我做错什么了吗?我可以做些什么来加快速度?

在您的学员中,您使用的是线性搜索和多个列表副本(也是线性的)。这是每一个项目。 糟糕的表现是意料之中的


如果您想改进这一点,可以预先计算结果

在代理中,您使用线性搜索和多个列表副本(也是线性的)。这是每一个项目。 糟糕的表现是意料之中的


如果您想改进这一点,可以预先计算结果

你找到解决办法了吗?我也有同样的问题!非常感谢您的帮助!你找到解决办法了吗?我也有同样的问题!非常感谢您的帮助!