如何重新排序列表视图中的列,其结果与拖放相同

时间:2009-10-14 21:11:36

标签: listview c#-2.0

如果我点击并拖动它们,如何重新排序代码中的列标题?

当ListView上的AllowColumnReorder为true时,您可以拖动列,并更改显示索引。将新项目添加到列表视图时,您不必担心列重新排列的方式,它会使用原始列顺序排列传入数据。

基本上我正在寻找一种简单的方法来保存显示索引,然后在再次使用listview时恢复它们。但我更喜欢保留原始列顺序以插入数据。

3 个答案:

答案 0 :(得分:2)

与几乎所有ListView任务一样,ObjectListView(.NET WinForms ListView的开源包装器)具有使这更容易的方法。具体来说,它有SaveState()RestoreState()方法,可以保存(除其他外)列的顺序。

您基本上按原样复制列,清除Columns集合,在列副本上正确设置DisplayIndex,然后再将所有列添加回来。

答案 1 :(得分:1)

Grammarian的回答给了我一个主意。按照默认顺序添加所有列后,我只需循环浏览它们并读取它们保存的位置。

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;

希望有所帮助。