DataGridView 绑定数据源 BindingList<T>

一.绑定数据源 BindingList<T>
1.定义行数据格式
    public class datarow
    {
        public string name{get;set;}
        public bool beman { get; set; }
        public int age { get; set; }
    }
2.创建要绑定的数据BindingList<T>
    BindingList<datarow> datas = new BindingList<datarow>();
    datarow row1 = new datarow();
    row1.name = "name2";
    row1.beman = true;
    row1.age = 12;
 
    datarow row2 = new datarow();
    row2.name = "name3";
    row2.beman = false;
    row2.age = 15;
 
    datarow row3 = new datarow();
    row3.name = "name1";
    row3.beman = false;
    row3.age = 15;
 
    datas.Add(row1);
    datas.Add(row2);
    datas.Add(row3);
 
    this.dataGridView1.DataSource = datas;    
    this.dataGridView1.Refresh();
 
3.获取修改后的数据
    foreach (datarow one in datas)
    {
        MessageBox.Show(one.name.ToString());
    }
二、排序
 
1.使用BindingList<T>的orderby(这个很简单)
this.dataGridView1.DataSource=datas.OrderBy(a => a.name).ToArray();
 
2.声明一个List,将BindingList传入作为构造函数,对List进行排序再将元素添加回BindingList。
 
a.申明list的比较函数
public void SortReportList(ref List<datarow> reportList)
    {
        reportList.Sort(delegate(datarow x, datarow y)
        {
            //First sort by category id, then display order, so report in same category gathered and sorted.
            int result = x.name.CompareTo(y.name);
            if (result == 0)
                return x.age - y.age;
            else
                return result;
        });
    }
b.把BindingList转为list,list排序后,再回存到BindingList
    public void SortReportsByDisplayOrder(ref BindingList<datarow> reportList)
    {
        List<datarow> list = new List<datarow>(reportList);
        SortReportList(ref list);
        reportList.Clear();
        foreach (datarow rpt in list)
        {
            reportList.Add(rpt);
        }
    }
c.在需要排序的地方增加
SortReportsByDisplayOrder(ref datas);
posted @ 2016-10-05 14:47  天涯海角路  阅读(465)  评论(0)    收藏  举报