使用绑定源时如何按字母顺序对 DataGridView 进行排序?

Posted

技术标签:

【中文标题】使用绑定源时如何按字母顺序对 DataGridView 进行排序?【英文标题】:How to sort DataGridView alphabetically when using binding source? 【发布时间】:2022-01-23 19:02:34 【问题描述】:

由于某种原因,当我使用列表作为绑定源时,dataGridView 不允许我以任何方式对其进行排序。有什么建议可以让字母排序正常工作吗?

    public partial class Form : Form

    List<Person> people = new List<Person>();
    string personsfile = "c:\\temp1\\people.json";
    public Form()
    
        InitializeComponent();

        henkilot = DeserializeJSON();
        if (people== null)
        
            people= new List<Person>();
        
        populateDataGrid();
    

    public void SerializeJSON(List<Person> input)
    
        string json = JsonConvert.SerializeObject(input);
        //write string to file
        System.IO.File.WriteAllText(personsfile, json);
    
    public List<Person> DeserializeJSON()
    
        if (File.Exists(personsfile))
        
            using (StreamReader r = new StreamReader(personsfile))
            
                string json = r.ReadToEnd();
                return JsonConvert.DeserializeObject<List<Person>>(json);
            
        
        else
            return null;
    

    public void populateDataGrid()
    
        BindingSource source = new BindingSource();
        source.DataSource = people;
        dataGrid.DataSource = source;
    

【问题讨论】:

看看这篇文章:DataGridView - Sort Generic Lists by Click on Column Headers - 要在 DataGridView 中自动支持排序,列表应该实现 IBindingList 及其与排序相关的成员。 【参考方案1】:

检查 source.SupportsSorting,它更有可能返回 false。要允许排序,请查看SortableBindingList。

将您的列表 加载到 SortableBindingList 例如_personList source.DataSource 分配给SortableBindingList 将 DataGridView.DataSource 设置为 source

通过DataGridView中的当前行获取数据当前Person。

Person person = _personList[source.Position];

【讨论】:

以上是关于使用绑定源时如何按字母顺序对 DataGridView 进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Matlab 按字母顺序对属性值对进行排序

如何使用 NSFetchedResultsController 按字母顺序对 UITableView 进行排序?

Python 如何对输出的词频结果按字母顺序排序(NLTK)

如何按字母顺序对项目进行排序?

如何使用自定义模型类按部分按字母顺序对 tableView 中的数据进行排序?

Intellij-IDEA:如何按字母顺序对成员进行排序?