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