WinForm實(shí)現(xiàn)基于BindingSource的方法擴(kuò)展
更新時(shí)間:2014年08月20日 08:47:39 投稿:shichen2014
這篇文章主要介紹了WinForm實(shí)現(xiàn)基于BindingSource的方法擴(kuò)展,需要的朋友可以參考下
本文實(shí)例展示了WinForm實(shí)現(xiàn)基于BindingSource的方法擴(kuò)展,共享給大家供大家參考。具體方法如下:
關(guān)鍵代碼如下:
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>條件移出個(gè)數(shù)</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; } } }
測(cè)試代碼如下:
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 ? "查找到一個(gè)." : "未查找到."); } 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 + "個(gè)" : "未查找到."); } } } /// <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è)試結(jié)果如下圖所示:
希望本文所述實(shí)例對(duì)大家C#程序設(shè)計(jì)能有所幫助!
您可能感興趣的文章:
- winform使用委托和事件來完成兩個(gè)窗體之間通信的實(shí)例
- C#之WinForm WebBrowser實(shí)用技巧匯總
- Winform下實(shí)現(xiàn)圖片切換特效的方法
- C#實(shí)現(xiàn)WinForm捕獲最小化事件的方法
- WinForm中變Enter鍵為Tab鍵實(shí)現(xiàn)焦點(diǎn)轉(zhuǎn)移的方法
- WinForm中的幾個(gè)實(shí)用技巧匯總
- WinForm相對(duì)路徑的陷阱
- WinForm實(shí)現(xiàn)為TextBox設(shè)置水印文字功能
- C# WinForm中禁止改變窗口大小的方法
- WinForm實(shí)現(xiàn)跨進(jìn)程通信的方法
相關(guān)文章
讀寫XML文件的內(nèi)容并將其顯示在ListView控件上的方法
下面小編就為大家?guī)硪黄x寫XML文件的內(nèi)容并將其顯示在ListView控件上的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02C#使用ThreadPriority設(shè)置線程優(yōu)先級(jí)
這篇文章介紹了C#使用ThreadPriority設(shè)置線程優(yōu)先級(jí)的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04c#靜態(tài)方法和非靜態(tài)方法詳細(xì)介紹
這篇文章主要介紹了c#靜態(tài)方法和非靜態(tài)方法,需要的朋友可以參考下2014-02-02