WinForm实现基于BindingSource的方法扩展
程序员文章站
2024-02-13 10:04:16
本文实例展示了winform实现基于bindingsource的方法扩展,共享给大家供大家参考。具体方法如下:
关键代码如下:
using system;
u...
本文实例展示了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#程序设计能有所帮助!