读书人

这个泛型类怎么调用

发布时间: 2012-09-14 23:00:49 作者: rapoo

求助:这个泛型类如何调用
类代码如下

C# code
using System;using System.Collections;using System.Collections.Generic;using System.Data;using System.Windows.Forms;namespace BUTIEMIS{    //用于统一处理两个List类型控件之间互相转移Items    public static class LstCtrlMove_Mgr<T>    {        //从一个ListBox中删除Items        public static void RemoveItems(ListBox lstBox, IEnumerable items)        {            if (typeof(T) == typeof(DataRow))            {                DataTable dt = ((DataTable)lstBox.DataSource);                DataTable newDt = dt.Clone();                bool flag = false;                //因为直接删除DataRow会保存,所以用这样丑陋的方式处理了                foreach (DataRow dr in dt.Rows)                {                    foreach (DataRowView item in items)                    {                        if (dr == item.Row)                        {                            flag = true;                            break;                        }                        else                            flag = false;                    }                    if (!flag)                        newDt.Rows.Add(dr.ItemArray);                    else                        continue;                }                lstBox.DataSource = newDt;            }            else            {                List<T> lst = new List<T>();                lst.AddRange((List<T>)lstBox.DataSource);                lst.RemoveAll(delegate(T item1)                {                    foreach (T item2 in items)                    {                        if (item1.Equals(item2))                            return true;                    }                    return false;                });                lstBox.DataSource = lst;            }        }        //向一个ListBox中添加Items        public static void AddItems(ListBox lstBox, IEnumerable items)        {            if (typeof(T) == typeof(DataRow))            {                DataTable dt = null;                foreach (object item in items)                {                    if (item is DataRowView)                        dt = ((DataRowView)item).Row.Table.Clone();                    if (item is DataRow)                        dt = ((DataRow)item).Table.Clone();                    break;                }                if (lstBox.DataSource != null)                    dt = ((DataTable)lstBox.DataSource).Copy();                foreach (object item in items)                {                    if (item is DataRowView)                        dt.Rows.Add(((DataRowView)item).Row.ItemArray);                    if (item is DataRow)                        dt.Rows.Add(((DataRow)item).ItemArray);                }                lstBox.DataSource = dt;            }            else            {                List<T> lst = new List<T>();                if (lstBox.DataSource != null)                    lst.AddRange((List<T>)lstBox.DataSource);                foreach (T item in items)                {                    lst.Add(item);                }                lstBox.DataSource = lst;            }        }        //将ListBox1的选定项转移到ListBox2中,并从ListBox1中去除        public static void Move(ListBox lstBox1, ListBox lstBox2)        {            if (lstBox1.SelectedItems.Count > 0)            {                AddItems(lstBox2, lstBox1.SelectedItems);                RemoveItems(lstBox1, lstBox1.SelectedItems);            }        }        //将整个lstBox1的项转移到ListBox2中,并清空ListBox1        public static void MoveAll(ListBox lstBox1, ListBox lstBox2)        {            if (typeof(T) == typeof(DataRow))            {                DataTable dt = (DataTable)lstBox1.DataSource;                AddItems(lstBox2, dt.Rows);                lstBox1.DataSource = dt.Clone();            }            else            {                AddItems(lstBox2, (List<T>)lstBox1.DataSource);                lstBox1.DataSource = new List<T>();            }        }    }} 


出类出处http://blog.csdn.net/fuadam/article/details/2475912#comments

请问在button_click事件中如何调用?

[解决办法]
看代码可以知道,他可以针对 DataTable 和 List<T> 两种类型。注释也很清楚了。

看你实际应用时,控件绑定的是什么。如果绑定的是DataTable。

那么 T 就是 DataRow。否则就是自定义类型。

然后调用 LstCtrlMove_Mgr<DataRow>.Move(list1, list2); 这样的。

读书人网 >C#

热点推荐