代码之家  ›  专栏  ›  技术社区  ›  Jack B Nimble

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

  •  0
  • Jack B Nimble  · 技术社区  · 16 年前

    如果我点击并拖动了列标题,我该如何对代码中的列标题进行重新排序?

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

    3 回复  |  直到 16 年前
        1
  •  2
  •   Grammarian    16 年前

    ObjectListView (一个围绕.NET WinForms ListView的开源包装器)有一些方法可以使这更容易。具体来说,它有 SaveState() RestoreState() 方法,它保存(除其他事项外)列的顺序。

    您基本上是按原样复制列,清除columns集合,在列的副本上正确设置DisplayIndex,然后再次添加所有列。

        2
  •  1
  •   Jack B Nimble    15 年前

    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;
    }
    

    Intellisense把我甩了,因为DisplayIndex上说

    这让我觉得它是只读的。事实并非如此。通常理智会说

    获取或设置

        3
  •  0
  •   user2374785    12 年前

    这里有个有趣的把戏。 在设计模式下设置列表视图,第一列和第二列交换。然后在运行时加载表单时,将列交换回所需的顺序。最终的效果是,标签编辑将在第二列上可用。

    AllowLabelEdit 允许列重新排序

    在设计模式下编辑列,并交换第一列和第二列的顺序。这将初始化 对第二列进行标签编辑的列表(现在位于displayindex 0中。) 然后,当表单初始化时,交换列的顺序。 形状载荷。.. //颠倒列的顺序 listView1.列[1]。显示指数=0;

    希望这能有所帮助。

    推荐文章