如何实现DataGridView的自动排序?

bsh*_*52s 15 c# sorting datagridview

我以编程方式将列添加到DataGridView,然后绑定到列表.默认情况下,列的SortMode是自动的.但是,当我运行我的应用程序时,单击标题无效.向上/向下箭头未显示.从阅读MSDN,关于自动排序的说法并不多.他们详细介绍了程序化排序.所以,我假设自动方式应该很容易.MSDN继续说" 除非使用列标题进行选择,否则单击列标题会自动按此列对DataGridView进行排序,并显示一个指示排序顺序的字形." 这到底是什么意思呢?我可以设置与排序冲突的网格属性吗?我错过了什么?

AutoGenerateColumns = false;
AllowUserToAddRows = false;
AllowUserToDeleteRows = false;
AllowUserToResizeRows = false;
AllowUserToResizeColumns = false;
ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
ReadOnly = true;
MultiSelect = false;
RowHeadersVisible = false;
SelectionMode = DataGridViewSelectionMode.FullRowSelect;
CellBorderStyle = DataGridViewCellBorderStyle.None;


    DataGridViewTextBoxColumn idColumn = new DataGridViewTextBoxColumn();
    idColumn.HeaderText = "ID";
    idColumn.DataPropertyName = "IDNumber";

    DataGridViewTextBoxColumn nameColumn = new DataGridViewTextBoxColumn();
    nameColumn.HeaderText = "Name";
    nameColumn.DataPropertyName = "Description";

    DataGridViewTextBoxColumn lastModifiedColumn = new DataGridViewTextBoxColumn();
    lastModifiedColumn.HeaderText = "Last Modified";
    lastModifiedColumn.DataPropertyName = "Date";

    Columns.Add(idColumn);
    Columns.Add(nameColumn);
    Columns.Add(lastModifiedColumn);

    List<IMyObject> bindingList = GetMyList();
    DataSource = bindingList;
Run Code Online (Sandbox Code Playgroud)

Chr*_*ett 22

我们使用BindingListView将List <T>绑定到DataGridViews,它对我们来说非常有效.

这是一个创建对象列表视图的简单示例(在C#中):

List<Customer> customers = GetCustomers();
BindingListView<Customer> view = new BindingListView<Customer>(customers);
dataGridView1.DataSource = view;
Run Code Online (Sandbox Code Playgroud)

有关DGV排序和数据绑定的更多详细信息,请访问/sf/answers/1256680351/.

如果您不想添加繁重的内容,可以尝试使用SortableBindingList <T>(带更新)的此实现.

根据他们的基准测试,两者都可以开箱即用,BindingListView比DataViews更快.


Mic*_*l J 1

我想我找到了答案。我的数据源实现了IList<T>. 显然需要实施IBindingList<T>。不幸的是,我无法对此进行测试。