[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;
        }

测试结果:

希望有所帮助!

[WinForm]基于BindingSource的方法扩展

时间: 2024-10-08 06:56:38

[WinForm]基于BindingSource的方法扩展的相关文章

WinForm实现基于BindingSource的方法扩展

本文实例展示了WinForm实现基于BindingSource的方法扩展,共享给大家供大家参考.具体方法如下: 关键代码如下: using System; using System.Collections.Generic; using System.Reflection; using System.Windows.Forms; namespace WinFormUtilHelpV2 { /// <summary> /// 基于.NET 2.0的BindingSource工具类 /// <

基于BindingSource的WinForm开发

BindingSource控件介绍 BindingSource控件介绍 BindingSource控件是.NET Framework 2.0提供的新控件之一.BindingSource控件与数据源建立连接,然后将窗体中的控件与BindingSource控件建立绑定关系来实现数据绑定,简化数据绑定的过程. BindingSource控件即是一个连接后台数据库的渠道,同时又是一个数据源,因为BindingSource控件即 支持向后台数据库发送命令来检索数据,又支持直接通过BindingSource

js中String常用方法详解及String对象方法扩展

一.JavaScript 中 slice .substr 和 substring的区别: 1: String.slice(start,end): 一个新的字符串.包括字符串 stringObject 从 start 开始(包括 start)到 end 结束(不包括 end)为止的所有字符. 2: String.substring(start,end) 这个就有点特别了,它是先从start,end里找出一个较小的值. 然后从字符串的开始位置算起,截取较小值位置和较大值位置之间的 字符串,截取出来的

jQuery扩展$.fn、$.extend jQery命名方法扩展 练习总结

<script>$.fn.hello = function(){  //扩展jQuery实例的自定义方法,基于$.fn的jq方法扩展    this.click(function(){        alert('hello');    })}$('input').hello();  // 点击input正确出弹窗 'hello'</script> <script>$.fn.extend({  //用extend扩展jQuery实例的自定义方法    hello:fun

WinForm之BindingSource基础操作实例教程

通常我们在进行数据绑定的时候,常用的数据源有DataSet.DataTable.BindingList<T>.还有强类型数据源.今天我们来通过实例了解一下BindingSource组建,分享给大家供大家参考借鉴之用. BindingSource的两个用途: (1)首先,它提供一个将窗体上的控件绑定到数据的间接层.这是通过将 BindingSource 组件绑定到数据源,然后将窗体上的控件绑定到 BindingSource 组件来完成的.与数据的所有进一步交互(包括导航.排序.筛选和更新)都是通

mybatis(基于annotation的方法知道就行了)

MyBatisUtil.java UserMapper.java package edu.hhxy.btais.util; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFacto

基于Spring的可扩展Schema进行开发自定义配置标签支持

一.背景 最近和朋友一起想开发一个类似alibaba dubbo的功能的工具,其中就用到了基于Spring的可扩展Schema进行开发自定义配置标签支持,通过上网查资料自己写了一个demo.今天在这里进行和大家分享,也记录下方便以后复习备忘. 二.demo测试环境 1.JDK1.7 2.spring 4.2.5.RELEASE 3.基于Maven 4.开发工具Eclipse 三.项目介绍 1.实现步骤分析 [1].设计配置属性并开发JavaBean. [2].编写xsd文件. [3].编写Nam

基于libmemcached,php扩展memcached的安装

基于libmemcached,php扩展memcached的安装 张映 发表于 2010-07-18 分类目录: php 标签:libmemcached, memcached, php, 安装 一,为什么要装memcached扩展 memcached的1.2.4及以上增加了CAS(Check and Set)协议,对于同一key的多进行程的并发处理问题.这种情况其实根数据库很像,如果同时有几个进程对同一个表的同一数据进行更新的话,那会不会打架呢,哈哈.数据库里面可以锁定整张表,也可以锁定表里面一

吉首大学_编译原理实验题_基于预測方法的语法分析程序的设计【通过代码】

一.实验要求 实验二 基于预測方法的语法分析程序的设计 一.实验目的 了解预測分析器的基本构成及用自顶向下的预測法对表达式进行语法分析的方法,掌握预測语法分析程序的手工构造方法. 二.实验内容 1.了解编译程序的基于预測方法的语法分析过程. 2.依据预測分析原理设计一个基于预測方法的语法分析程序. 三.实验要求 对给定文法G[S]: S->AT       A->BU     T->+AT|$      U->*BU|$    B->(S)|m 当中,$表示空串. 1.推断上