【问题标题】:Disable sorting listview禁用排序列表视图
【发布时间】:2017-01-23 14:38:35
【问题描述】:

我在 WinForm 中使用列表视图。通过单击列标题,列表视图将被排序。

是否可以禁用此功能?

【问题讨论】:

  • 什么形式? WPF、WinForms、WebForms?
  • 我正在使用 WinForms

标签: c# winforms listview


【解决方案1】:

我会检查这个答案 - ListView sorting

.. 但它不会禁用单击任何按钮时的排序。对此的解决方案是创建自己的继承自 ListView 的子级,这将覆盖排序方法,而不调用基本方法 => 什么也不做。

另外,您可以添加 ListViewItemSorter 并将其设置为 null。

例如:

class MyListView : System.Windows.Forms.ListView
{
    public MyListView()
    {
        this.Sorting = System.Windows.Forms.SortOrder.None;
        this.ListViewItemSorter = null;
    }
}

【讨论】:

    【解决方案2】:

    Here是一篇介绍如何在listView上实现排序的文章。

    您可能必须从 listView 上的 ColumnClick 事件中移除事件处理程序。

    【讨论】:

      【解决方案3】:

      我个人更喜欢LVS_NOSORTHEADER的窗口风格:

      列标题不像按钮那样工作。如果在报表视图中单击列标题没有执行任何操作(例如排序),则可以使用此样式。

      使用类似的东西:

      public class MyListView : 
          System.Windows.Forms.ListView
      {
          protected override CreateParams CreateParams
          {
              get
              {
                  var cp = base.CreateParams;
                  cp.Style |= 0x8000; // LVS_NOSORTHEADER
                  return cp;
              }
          }
      }
      

      请注意,您不能在创建控件后使用SetWindowLong 设置样式。 You can only use LVS_NOSORTHEADER upon control creation:

      ListCtrl 不会忽略样式,但有些样式只在创建控件时生效。因此,在创建控件后对此类样式的任何更改都将无效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        相关资源
        最近更新 更多