一个自定义Collection类的实现(C#) 第一篇工作日志

决心从今天起开始写工作日志。可以对工作的总结和对人生感悟。很多年后,也许会是一笔厚厚的财富。

今天用C#实现了一个Collection类。放着现成.net类库中的Array,ArrayList,HashTable等等集合类不用,为什么要重写一个呢。
不知道大家有没有遇到这种情况。项目开发过程中会遇到状态,性别,某某类型等情况,显示给用户看的是文本,而存储在数据库中的是值。比如性别,可能有 男对应1,女对应0。怎么在程序中完成这种对应呢。
   第一种采用系统参数的办法。专门为此建一个参数表。
   第二种在程序中对这些 文本--值 的类型进行定义。虽然可以使用.net类库中数组或其他集合定义,但是将来使用这些定义时不方便。比如根据值获得文本,从数据库取得0,如何判断它对应的文本值女。或者是向下拉控件中绑定这些值。都不是很方便。
   所以我定义了新的集合类TypeCollection。以下是代码。贴出来和大家切磋。

 

  1/// <summary>
  2        /// 文本-值  类型的类
  3        /// </summary>

  4        public class Type
  5        {
  6            //构造函数
  7            public Type(string strName,string strValue)
  8            {
  9                this._name=strName;
 10                this._value=strValue;
 11            }

 12
 13            public Type()
 14            {
 15
 16            }

 17
 18            private string _name="";
 19            private string _value="";
 20
 21            /// <summary>
 22            /// 获取Type的文本
 23            /// </summary>

 24            public string Name
 25            {
 26                get{return this._name;}
 27            }

 28
 29            /// <summary>
 30            /// 获取Type的值
 31            /// </summary>

 32            public string Value
 33            {
 34                get{return this._value;}
 35            }

 36        }

 37
 38        /// <summary>
 39        /// 用来存放 文本-值  类型的类的集合
 40        /// </summary>

 41        public class TypeCollection
 42        {
 43            private DataTable dt=null;
 44            public const string NameField="Name";
 45            public const string ValueField="Value";
 46
 47            public TypeCollection()
 48            {
 49                dt=new DataTable();
 50                dt.Columns.Add(NameField);
 51                dt.Columns.Add(ValueField);
 52            }

 53
 54            public TypeCollection(string[,] listItem)
 55            {
 56                dt=new DataTable();
 57                dt.Columns.Add(NameField);
 58                dt.Columns.Add(ValueField);
 59                
 60                if(listItem.Length>0)
 61                {
 62                    //获取一维个数
 63                    int count=listItem.Length/listItem.Rank;
 64                    for(int i=0;i<count;i++)
 65                    {
 66                        dt.Rows.Add(new object[]{listItem[i,0],listItem[i,1]});
 67                    }

 68                }

 69            }

 70
 71            /// <summary>
 72            /// 获取TypeCollection中item
 73            /// </summary>
 74            /// <param name="strValue">item的值</param>
 75            /// <returns></returns>

 76            public Type GetItemByValue(string strValue)
 77            {
 78                DataRow[] rows=dt.Select(string.Format("Value='{0}'",strValue.Trim()));
 79                
 80                if(rows!=null&&rows.Length>0)
 81                {
 82                    return new Type(rows[0].ToString(),rows[1].ToString());
 83                }

 84                else
 85                {
 86                    return null;
 87                }

 88            }

 89
 90            /// <summary>
 91            /// 返回TypeCollection的DataTable
 92            /// </summary>
 93            /// <returns></returns>

 94            public DataTable GetTypeAsDataTable()
 95            {
 96                return dt;
 97            }

 98
 99            /// <summary>
100            /// 绑定列表控件
101            /// </summary>
102            /// <param name="ddl">列表控件</param>
103            /// <param name="defaultText">默认项Text</param>
104            /// <param name="defaultValue">默认项value</param>
105            /// <param name="exitDefault">是否要默认项</param>

106            private void BindDDlControl(ListControl objControl,string defaultText,string defaultValue,bool exitDefault)
107            {
108                if(dt!=null&&dt.Rows.Count>0)
109                {
110                    objControl.Items.Clear();
111
112                    //添加默认项
113                    if(exitDefault)
114                    {
115                        objControl.Items.Add(new ListItem(defaultText,defaultValue));
116                    }

117                    //绑定数据
118                    foreach(DataRow row in dt.Rows)
119                    {
120                        objControl.Items.Add(new ListItem(row[0].ToString().Trim(),row[1].ToString().Trim()));
121                    }

122                }

123            }

124
125            绑定下拉控件
146
147            绑定多选框列表
153        }

154
155        /// <summary>
156        /// 性别
157        /// </summary>

158        public static TypeCollection tcOrderType=new TypeCollection(new string[,]{{"","1"},{"","0"}});

 

 这个集合类可以方便实现
1,文本--值类型的定义
2,根据值查找文本
3,向控件绑定更方便。
尤其是定义大量的类型时。

总结:1,可以通过自己对.net类库的灵活使用 ,实现更多的功能。
2,多态的应用。对于多选框和下拉框,都是ListControl控件。参数声明直接声明为基类型。
3, 对面向对象的深入理解。具有相同行为和属性的一组对象,可以抽象为类。定义统一的方法和属性。比如本例中的Type和TypeCollection类型。

posted on 2006-12-20 17:29  农民  阅读(2695)  评论(7编辑  收藏  举报

导航