国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > 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#程序設計能有所幫助!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 枣阳市| 恭城| 澜沧| 湘潭县| 上饶县| 竹溪县| 临汾市| 虎林市| 原平市| 临武县| 平定县| 蛟河市| 海宁市| 曲麻莱县| 遂宁市| 小金县| 韶关市| 江山市| 葫芦岛市| 潜江市| 巨野县| 新宾| 自治县| 宁乡县| 册亨县| 太谷县| 尉犁县| 客服| 赞皇县| 邵武市| 武城县| 周宁县| 遵化市| 和静县| 泰安市| 循化| 南宁市| 铁岭市| 远安县| 息烽县| 荥阳市|