当前位置: 编程技术>.net/c#/asp.net
WinForm实现基于BindingSource的方法扩展
来源: 互联网 发布时间:2014-11-02
本文导语: 本文实例展示了WinForm实现基于BindingSource的方法扩展,共享给大家供大家参考。具体方法如下: 关键代码如下: using System; using System.Collections.Generic; using System.Reflection; using System.Windows.Forms; namespace WinFormUtilHelpV2 { /// ...
本文实例展示了WinForm实现基于BindingSource的方法扩展,共享给大家供大家参考。具体方法如下:
关键代码如下:
using System; using System.Collections.Generic; using System.Reflection; using System.Windows.Forms; namespace WinFormUtilHelpV2 { /// /// 基于.NET 2.0的BindingSource工具类 /// public static class BindingSourceToolV2 { /// /// 获取Control的BindingSource /// /// Control /// BindingSource 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; } /// /// 从BindingSource中条件移出 /// /// 泛型 /// BindingSource /// 委托 /// 条件移出个数 public static int Remove(this BindingSource dbSource, Predicate 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; } /// /// 从BindingSource中条件查找 /// /// 泛型 /// BindingSource /// 委托 /// 没有查找到则返回NULL public static T Find(this BindingSource dbSource, Predicate match) where T : class { T _finded = null; if (dbSource != null) { foreach (T t in dbSource.List) { if (match(t)) { _finded = t; break; } } } return _finded; } /// /// 从BindingSource中条件查找集合 /// /// 泛型 /// BindingSource /// 委托 /// 没有查找到则返回NULL public static IList FindAll(this BindingSource dbSource, Predicate match) where T : class { IList _findedList = null; if (dbSource != null) { _findedList = new List(); 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 _source = new List(); 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(c => c.Age == 5); MessageBox.Show("条件查找:" + _person != null ? "查找到一个." : "未查找到."); } private void button2_Click(object sender, EventArgs e) { int _count = dataGridView1.GetBindingSource().Remove(c => c.Age >= 5); MessageBox.Show("成功移出:" + _count); } private void button3_Click(object sender, EventArgs e) { IList _personList = dataGridView1.GetBindingSource().FindAll(c => c.Age < 5); MessageBox.Show("条件查找:" + _personList != null ? "查找到" + _personList.Count + "个" : "未查找到."); } } } /// /// DataGridView SetBindingSource /// /// IList /// dataGrid /// 泛型 public static void SetBindingSource(this DataGridView dataGrid, IList source) { BindingList _bindinglist = new BindingList(source); BindingSource _source = new BindingSource(_bindinglist, null); dataGrid.DataSource = _source; }
测试结果如下图所示:
希望本文所述实例对大家C#程序设计能有所帮助!