zl程序教程

您现在的位置是:首页 >  后端

当前栏目

WinForm实现基于BindingSource的方法扩展

Winform方法扩展 实现 基于
2023-06-13 09:15:43 时间

本文实例展示了WinForm实现基于BindingSource的方法扩展,共享给大家供大家参考。具体方法如下:

关键代码如下:

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Reflection;
usingSystem.Windows.Forms;

namespaceWinFormUtilHelpV2
{
///<summary>
///基于.NET2.0的BindingSource工具类
///</summary>
publicstaticclassBindingSourceToolV2
{
///<summary>
///获取Control的BindingSource
///</summary>
///<paramname="control">Control</param>
///<returns>BindingSource</returns>
publicstaticBindingSourceGetBindingSource(thisControlcontrol)
{
if(control!=null)
{
PropertyInfo_finded=control.GetType().GetProperty("DataSource");
if(_finded!=null)
{
object_dbsource=_finded.GetValue(control,null);
if(_dbsource!=null&&_dbsourceisBindingSource)
{
return_dbsourceasBindingSource;
}
}
}
returnnull;
}
///<summary>
///从BindingSource中条件移出
///</summary>
///<typeparamname="T">泛型</typeparam>
///<paramname="dbSource">BindingSource</param>
///<paramname="match">委托</param>
///<returns>条件移出个数</returns>
publicstaticintRemove<T>(thisBindingSourcedbSource,Predicate<T>match)whereT:class
{
int_count=0;
if(dbSource!=null)
{
for(inti=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>
///<typeparamname="T">泛型</typeparam>
///<paramname="dbSource">BindingSource</param>
///<paramname="match">委托</param>
///<returns>没有查找到则返回NULL</returns>
publicstaticTFind<T>(thisBindingSourcedbSource,Predicate<T>match)whereT:class
{
T_finded=null;
if(dbSource!=null)
{
foreach(TtindbSource.List)
{
if(match(t))
{
_finded=t;
break;
}
}
}
return_finded;
}
///<summary>
///从BindingSource中条件查找集合
///</summary>
///<typeparamname="T">泛型</typeparam>
///<paramname="dbSource">BindingSource</param>
///<paramname="match">委托</param>
///<returns>没有查找到则返回NULL</returns>
publicstaticIList<T>FindAll<T>(thisBindingSourcedbSource,Predicate<T>match)whereT:class
{
IList<T>_findedList=null;
if(dbSource!=null)
{
_findedList=newList<T>();
foreach(TtindbSource.List)
{
if(match(t))
{
_findedList.Add(t);
}
}
}
return_findedList;
}

}
}

测试代码如下:

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Windows.Forms;
usingWinFormUtilHelpV2;
usingWinFormUtilHelpV2Test.Models;
namespaceWinFormUtilHelpV2Test
{
publicpartialclassWinBindingSourceToolV2Test:Form
{
publicWinBindingSourceToolV2Test()
{
InitializeComponent();
}
privatevoidWinBindingSourceToolV2Test_Load(objectsender,EventArgse)
{
IList<Person>_source=newList<Person>();
for(inti=0;i<10;i++)
{
Person_entity=newPerson();
_entity.Age=i;
_entity.Name="YanZhiwei"+i;
_source.Add(_entity);
}
dataGridView1.SetBindingSource(_source);
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
Person_person=dataGridView1.GetBindingSource().Find<Person>(c=>c.Age==5);
MessageBox.Show("条件查找:"+_person!=null?"查找到一个.":"未查找到.");
}
privatevoidbutton2_Click(objectsender,EventArgse)
{
int_count=dataGridView1.GetBindingSource().Remove<Person>(c=>c.Age>=5);
MessageBox.Show("成功移出:"+_count);
}
privatevoidbutton3_Click(objectsender,EventArgse)
{
IList<Person>_personList=dataGridView1.GetBindingSource().FindAll<Person>(c=>c.Age<5);
MessageBox.Show("条件查找:"+_personList!=null?"查找到"+_personList.Count+"个":"未查找到.");
}
}
}
///<summary>
///DataGridViewSetBindingSource
///</summary>
///<typeparamname="T">IList</typeparam>
///<paramname="dataGrid">dataGrid</param>
///<paramname="source">泛型</param>
publicstaticvoidSetBindingSource<T>(thisDataGridViewdataGrid,IList<T>source)
{
BindingList<T>_bindinglist=newBindingList<T>(source);
BindingSource_source=newBindingSource(_bindinglist,null);
dataGrid.DataSource=_source;
}

测试结果如下图所示:

希望本文所述实例对大家C#程序设计能有所帮助!