如果我点击并拖动它们,如何重新排序代码中的列标题?
当ListView上的AllowColumnReorder为true时,您可以拖动列,并更改显示索引。将新项目添加到列表视图时,您不必担心列重新排列的方式,它会使用原始列顺序排列传入数据。
基本上我正在寻找一种简单的方法来保存显示索引,然后在再次使用listview时恢复它们。但我更喜欢保留原始列顺序以插入数据。
答案 0 :(得分:2)
与几乎所有ListView任务一样,ObjectListView(.NET WinForms ListView的开源包装器)具有使这更容易的方法。具体来说,它有SaveState()
和RestoreState()
方法,可以保存(除其他外)列的顺序。
您基本上按原样复制列,清除Columns集合,在列副本上正确设置DisplayIndex,然后再将所有列添加回来。
答案 1 :(得分:1)
for (int ix = 0; ix < listView.Columns.Count; ix++)
{
ColumnHeader columnHeader = listView.Columns[ix];
int displayIndex = Settings.GetSettingInt("List", columnHeader.Text + "Index");
columnHeader.DisplayIndex = displayIndex;
}
智能感知让我失望,因为在DisplayIndex上说是
获取列相对于当前显示的列的显示顺序
这让我觉得它是只读的。事实并非如此。通常intellisense会说
获取或设置
答案 2 :(得分:0)
这是一个有趣的伎俩。 在设计模式下设置列表视图,并交换第一列和第二列。然后在运行时加载表单时将列交换回所需的顺序。最终效果是标签编辑将在第二列上提供。
将以下设置为true AllowLabelEdit AllowColumnReorder
在设计模式下编辑列,并交换第一列和第二列的顺序。这初始化 第二列的标签编辑列表(现在显示为零)。 然后在表单初始化时,交换列的顺序。 形式负荷...... //反转列的顺序 listView1.Columns [0] .DisplayIndex = 1; listView1.Columns [1] .DisplayIndex = 0;
希望有所帮助。