当前位置: 移动技术网 > IT编程>开发语言>c# > WinForm实现基于BindingSource的方法扩展

WinForm实现基于BindingSource的方法扩展

2019年07月18日  | 移动技术网IT编程  | 我要评论
本文实例展示了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#程序设计能有所帮助!

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网