FastObjectListView UpdateObject() 在主要排序中随机重新排序行
FastObjectListView UpdateObject() randomly reorders rows within primary sort
- 数据是域 objects 的通用列表。
- 我单击 "Deploy Status" 列 header 对该列进行排序。
- 我有一个按钮,它只做 folv.UpdateObject(someObject) .
- 每次我按下该按钮时,“部署状态”列都会保持其排序,但排序块中的所有行都会随机重新排序,如屏幕截图所示。
除了加载数据、测试按钮和 FastObjectListView 的 column.Add() 和 .SetObjects() 之外,我已经注释掉了表单代码中的所有内容。没有为 FastObjectListView 连接的事件处理程序。我没有在代码中设置 PrimarySort 或 SecondarySort;只需用鼠标点击即可。
您应该可以通过在按钮调用 UpdateObject
之后调用 Sort
或将 UpdateObject
的用法更改为 RefreshObject
[=16 来解决此问题=]
重现问题(C# Repro for the issue in the API)
这似乎重现了您遇到的问题。 运行 代码,对其他列进行升序排序。单击更新按钮。
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();
}
};
- 数据是域 objects 的通用列表。
- 我单击 "Deploy Status" 列 header 对该列进行排序。
- 我有一个按钮,它只做 folv.UpdateObject(someObject) .
- 每次我按下该按钮时,“部署状态”列都会保持其排序,但排序块中的所有行都会随机重新排序,如屏幕截图所示。
除了加载数据、测试按钮和 FastObjectListView 的 column.Add() 和 .SetObjects() 之外,我已经注释掉了表单代码中的所有内容。没有为 FastObjectListView 连接的事件处理程序。我没有在代码中设置 PrimarySort 或 SecondarySort;只需用鼠标点击即可。
您应该可以通过在按钮调用 UpdateObject
之后调用 Sort
或将 UpdateObject
的用法更改为 RefreshObject
[=16 来解决此问题=]
重现问题(C# Repro for the issue in the API)
这似乎重现了您遇到的问题。 运行 代码,对其他列进行升序排序。单击更新按钮。
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();
}
};