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

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

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

    如何在代码中重新排序列标题,就好像我单击并拖动了它们一样?

    当ListView上的allowColumnReorder为true时,可以拖动列,并更改显示索引。向ListView添加新项时,不必担心列是如何重新排列的,它会将传入数据与原始列顺序对齐。

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

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

    和几乎所有ListView任务一样, ObjectListView (一个围绕.NET WinForms ListView的开放源代码包装器)有一些方法来简化这一过程。具体来说,它有 SaveState() RestoreState() 方法,其中保存了列的顺序。

    基本上,您可以按原样复制列,清除columns集合,在列副本上正确设置displayindex,然后重新添加所有列。

        2
  •  1
  •   Jack B Nimble    13 年前

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

    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    10 年前

    这是一个有趣的技巧。 在设计模式下设置ListView,第一列和第二列交换。然后在运行时加载表单时,将列调回所需的顺序。净效果是标签编辑将在第二列中可用。

    将以下项设置为“真” 允许标签编辑 允许列重新排序

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

    希望有帮助。