首页 > 编程 > C# > 正文

WinForm实现基于BindingSource的方法扩展

2020-01-24 02:30:30
字体:
来源:转载
供稿:网友

本文实例展示了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;    }  }}

测试代码如下:

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 + "个" : "未查找到.");    }  }}    /// <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;    }

测试结果如下图所示:

希望本文所述实例对大家C#程序设计能有所帮助!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表