码迷,mamicode.com
首页 > Windows程序 > 详细

[WinForm]基于BindingSource的方法扩展

时间:2014-08-14 13:37:38      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:winform   datagridview   style   blog   http   color   os   io   

关键代码:

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

测试结果:

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

希望有所帮助!

[WinForm]基于BindingSource的方法扩展,布布扣,bubuko.com

[WinForm]基于BindingSource的方法扩展

标签:winform   datagridview   style   blog   http   color   os   io   

原文地址:http://www.cnblogs.com/Yan-Zhiwei/p/3911999.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!