首页 > 代码库 > [WinForm]基于BindingSource的方法扩展

[WinForm]基于BindingSource的方法扩展

关键代码:

using System;using System.Collections.Generic;using System.Reflection;using System.Windows.Forms;namespace WinFormUtilHelpV2{    /// <summary>    /// 基于.NET 2.0的BindingSource工具类    /// </summary>    public static class BindingSourceToolV2    {        /// <summary>        /// 获取Control的BindingSource        /// </summary>        /// <param name="control">Control</param>        /// <returns>BindingSource</returns>        public static BindingSource GetBindingSource(this Control control)        {            if (control != null)            {                PropertyInfo _finded = control.GetType().GetProperty("DataSource");                if (_finded != null)                {                    object _dbsource = _finded.GetValue(control, null);                    if (_dbsource != null && _dbsource is BindingSource)                    {                        return _dbsource as BindingSource;                    }                }            }            return null;        }        /// <summary>        /// 从BindingSource中条件移出        /// </summary>        /// <typeparam name="T">泛型</typeparam>        /// <param name="dbSource">BindingSource</param>        /// <param name="match">委托</param>        /// <returns>条件移出个数</returns>        public static int Remove<T>(this BindingSource dbSource, Predicate<T> match) where T : class        {            int _count = 0;            if (dbSource != null)            {                for (int i = 0; i < dbSource.List.Count; i++)                {                    object _cur = dbSource.List[i];                    if (match((T)_cur))                    {                        dbSource.List.Remove(_cur);                        _count++;                        i--;                    }                }            }            return _count;        }        /// <summary>        ///  从BindingSource中条件查找        /// </summary>        /// <typeparam name="T">泛型</typeparam>        /// <param name="dbSource">BindingSource</param>        /// <param name="match">委托</param>        /// <returns>没有查找到则返回NULL</returns>        public static T Find<T>(this BindingSource dbSource, Predicate<T> match) where T : class        {            T _finded = null;            if (dbSource != null)            {                foreach (T t in dbSource.List)                {                    if (match(t))                    {                        _finded = t;                        break;                    }                }            }            return _finded;        }        /// <summary>        ///  从BindingSource中条件查找集合        /// </summary>        /// <typeparam name="T">泛型</typeparam>        /// <param name="dbSource">BindingSource</param>        /// <param name="match">委托</param>        /// <returns>没有查找到则返回NULL</returns>        public static IList<T> FindAll<T>(this BindingSource dbSource, Predicate<T> match) where T : class        {            IList<T> _findedList = null;            if (dbSource != null)            {                _findedList = new List<T>();                foreach (T t in dbSource.List)                {                    if (match(t))                    {                        _findedList.Add(t);                    }                }            }            return _findedList;        }    }}
<style></style>

代码测试:

using System;using System.Collections.Generic;using System.Windows.Forms;using WinFormUtilHelpV2;using WinFormUtilHelpV2Test.Models;namespace WinFormUtilHelpV2Test{    public partial class WinBindingSourceToolV2Test : Form    {        public WinBindingSourceToolV2Test()        {            InitializeComponent();        }        private void WinBindingSourceToolV2Test_Load(object sender, EventArgs e)        {            IList<Person> _source = new List<Person>();            for (int i = 0; i < 10; i++)            {                Person _entity = new Person();                _entity.Age = i;                _entity.Name = "YanZhiwei" + i;                _source.Add(_entity);            }            dataGridView1.SetBindingSource(_source);        }        private void button1_Click(object sender, EventArgs e)        {            Person _person = dataGridView1.GetBindingSource().Find<Person>(c => c.Age == 5);            MessageBox.Show("条件查找:" + _person != null ? "查找到一个." : "未查找到.");        }        private void button2_Click(object sender, EventArgs e)        {            int _count = dataGridView1.GetBindingSource().Remove<Person>(c => c.Age >= 5);            MessageBox.Show("成功移出:" + _count);        }        private void button3_Click(object sender, EventArgs e)        {            IList<Person> _personList = dataGridView1.GetBindingSource().FindAll<Person>(c => c.Age < 5);            MessageBox.Show("条件查找:" + _personList != null ? "查找到" + _personList.Count + "个" : "未查找到.");        }    }}
<style></style>
        /// <summary>        /// DataGridView SetBindingSource        /// </summary>        /// <typeparam name="T">IList</typeparam>        /// <param name="dataGrid">dataGrid</param>        /// <param name="source">泛型</param>        public static void SetBindingSource<T>(this DataGridView dataGrid, IList<T> source)        {            BindingList<T> _bindinglist = new BindingList<T>(source);            BindingSource _source = new BindingSource(_bindinglist, null);            dataGrid.DataSource = _source;        }

测试结果:

image

image

image

image

希望有所帮助!

<style></style>