FastObjectListView UpdateObject()随机对主要排序中的行进行重新排序

时间:2019-12-12 22:20:03

标签: vb.net winforms objectlistview

  1. 数据是域对象的通用列表。
  2. 我单击“部署状态”列标题以对该列进行排序。
  3. 我有一个按钮,只不过是folv.UpdateObject(someObject)。
  4. 每次按该按钮时,“部署状态”列都会保持其排序,但是按照屏幕快照,已排序块中的所有行都会被随机重新排序。

除了加载数据,测试按钮和FastObjectListView的column.Add()和.SetObjects()之外,我已经注释掉了表单代码中的所有内容。没有为FastObjectListView连接事件处理程序。我没有在代码中设置PrimarySort或SecondarySort;只需用鼠标单击即可。

random reordering

1 个答案:

答案 0 :(得分:1)

您应该能够通过以下方法解决此问题:在按钮调用到Sort之后调用UpdateObject或将UpdateObject的用法更改为RefreshObject

再现问题(API中针对该问题的C#Repro)

这似乎重现了您遇到的问题。运行代码,将“其他”列升序排列。点击更新按钮。

public class MainForm : Form
{
    public MainForm()
    {
        System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
        // 
        // MainForm
        // 
        this.ClientSize = new System.Drawing.Size(300, 300);
        this.Name = "MainForm";
        this.ResumeLayout(false);
        this.PerformLayout();

        var OLVa = new FastObjectListView();
        OLVa.Width = 250;
        OLVa.Height = 250;
        OLVa.Columns.Add(new OLVColumn("ID", "ID"));
        OLVa.Columns.Add(new OLVColumn("Other", "Other"));

        var l1 = new lolz(1, 3);

        OLVa.AddObject(l1);
        OLVa.AddObject(new lolz(2,3));

        this.Controls.Add(OLVa);
        var btn = new Button()
        {
            Text = "Update",
            Top = OLVa.Bottom
        };
        btn.Click += (s,e)=>OLVa.UpdateObject(l1);

        this.Controls.Add(btn);
    }

    private class lolz
    {
        public int ID;
        public int Other;

        public lolz(int id, int other)
        {
            ID = id;
            Other = other;
        }
    }
}

解决问题

下面的示例将解决此问题:

btn.Click += (s,e)=>
            {
                OLVa.BeginUpdate();
                try
                {
                    OLVa.UpdateObject(l1);
                    OLVa.Sort();
                }
                finally
                {
                    OLVa.EndUpdate();
                }
            };