首页 > 代码库 > [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; }
测试结果:
希望有所帮助!
<style></style>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。