【问题标题】:Can the DataGridView allow user sort when AutoGenerateColumns is true当 AutoGenerateColumns 为 true 时,DataGridView 是否允许用户排序
【发布时间】:2012-12-07 03:38:13
【问题描述】:

我想写的代码是这样的:

IEnumerable<SomeModel> items = GetTheItems();

dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = BuildTheDataSource(items);

数据网格会在标题上显示排序字形,并允许用户通过单击它们进行排序。

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

更新

现在鸡蛋在我脸上了! 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;
}

【问题讨论】:

    标签: winforms datagridview


    【解决方案1】:

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

    是这样的:

            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;
    

    所以,从List&lt;Person&gt;SortableBindingList,列是在PersonFields and Properties 中创建的。

    你的问题是什么意思?:

    但该解决方案(和其他)似乎仅适用于手动创建的列。

    更新

    试试这个

            dataGridView1.AutoGenerateColumns = true;
            IEnumerable<SomeModel> items = GetTheItems();
    
            SortableBindingList<SomeModel> items = new SortableBindingList<SomeModel>(items.ToList()); 
            dataGridView1.DataSource = items;
    

    【讨论】:

    • 我想要AutoGenerateColumns = true - 我不想在设计器或代码中配置列。
    • 好的..试试这个SortableBindingList&lt;SomeModel&gt; items = new SortableBindingList&lt;SomeModel&gt;([yourItemList]);
    • 我修改了我的帖子。我希望它会有所帮助并得到一些想法:)
    • 接受,因为您的更新无法编译的方式指出了我代码中的错误 :)
    猜你喜欢
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2019-12-28
    相关资源
    最近更新 更多