Winforms 当AutoGenerateColumns为true时,DataGridView是否允许用户排序

Winforms 当AutoGenerateColumns为true时,DataGridView是否允许用户排序,winforms,datagridview,Winforms,Datagridview,我要编写的代码如下所示: IEnumerable<SomeModel> items = GetTheItems(); dataGridView1.AutoGenerateColumns = true; dataGridView1.DataSource = BuildTheDataSource(items); IEnumerable items=GetTheItems(); dataGridView1.AutoGenerateColumns=true; dataGridView1.

我要编写的代码如下所示:

IEnumerable<SomeModel> items = GetTheItems();

dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = BuildTheDataSource(items);
IEnumerable items=GetTheItems();
dataGridView1.AutoGenerateColumns=true;
dataGridView1.DataSource=构建数据源(项);
数据网格将在标题上显示排序图示符,并允许用户通过单击它们进行排序

到目前为止,我得到的最有希望的线索是提出的SortableBindingList,但该解决方案(以及其他解决方案)似乎只适用于手动创建的列

更新

现在鸡蛋在我脸上了!SortableBindingList确实有效,但我犯了一个典型的错误:

void Bind(List<Model> items)
{
    this.items = new SortableBindingList<Model>(items);

    // oops! "items" is a List<T>... what I really wanted was
    // "this.items" which is a SortableBindingList<T>
    dataGridView1.DataSource = items;
}
void绑定(列表项)
{
this.items=新的可排序绑定列表(items);
//哦!“项目”是一个列表…我真正想要的是
//“this.items”是一个可排序的BindingList
dataGridView1.DataSource=项目;
}

如果我理解你的问题。给出的示例

因此:

        this.dataGridView1.AutoGenerateColumns = false;

        this.ColumnId.DataPropertyName = "Id";
        this.ColumnFirstName.DataPropertyName = "FirstName";
        this.ColumnLastName.DataPropertyName = "LastName";
        this.ColumnBirthday.DataPropertyName = "Birthday";
        this.ColumnScore.DataPropertyName = "Score";

        List<Person> list = new List<Person>();
        list.Add(new Person(1, "Tim", "4", new DateTime(1980, 4, 30), 100.1));
        list.Add(new Person(2, "Amy", "2", new DateTime(1983, 1, 1), 200.2));
        list.Add(new Person(3, "Sarah", "3", new DateTime(1984, 1, 24), 300.3));
        list.Add(new Person(4, "Mike", "1", new DateTime(1988, 3, 21), 400.4));

        SortableBindingList<Person> persons = new SortableBindingList<Person>(list);

        this.dataGridView1.DataSource = persons;

我想要
AutoGenerateColumns=true
-我不想在设计器或代码中配置列。确定。。试试这个
SortableBindingList items=new-SortableBindingList([yourItemList])
;我修改了我的帖子。我希望这会有所帮助,并获得一些想法:)接受,因为您的更新无法编译的方式将我指向了代码中的错误:)
        dataGridView1.AutoGenerateColumns = true;
        IEnumerable<SomeModel> items = GetTheItems();

        SortableBindingList<SomeModel> items = new SortableBindingList<SomeModel>(items.ToList()); 
        dataGridView1.DataSource = items;