在上篇Blog中介绍了如何定义一个与DataRow相结合的数据类,那么本篇将介绍如何定义一个与DataTable对应的数据集合。

在DotNet中提供了一个CollectionBase作为我们定义强类型的数据集合的抽象类,在DotNet1.1中要定义一个强类型的数据集合就必须为每一种数据类定义一个对应的数据集合,在2.0中增加了泛型的功能后,这个问题得到了解决。又由于在目前的Ibatisnet版本中还不支持泛型的功能,所以数据集合可以选择从ArrayList或CollectionBase继承下来。但是不管是ArrayList还是CollectionBase都不支持序列化,也是他们都有没有Serializable属性,那么实现的数据集合也将无法实现序列化,所以这边选择直接实现IList接口,内部再实例化一个ArrayList做为数据容器。类的定义如下:

public class ObjectList : IList, ISerializable{}

还有一需要解决的问题是,数据类如何与DataTable对应起来呢?在数据类定义一个DataTable的属性和内部变量,做为存储数据的容器。


 1与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集private DataTable m_dataTable = null;

 2与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_02与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_03/**//// <summary>

 3与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// Gets the data table form.

 4与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// </summary>

 5与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_06        /// <value>The data table form.</value>

 6与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集        public DataTable DataTableForm

 7与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_02与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_03        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

 8与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12            get 与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{ return m_dataTable; }

 9与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_06     }

10与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集


因为前面有提到了,一个对象对应一个DataRow,当前一个对象单独存在时,它的数据存放在数据类的数据容器里,而当中被加到一个集合里时,数据行就应该存放在数据集合对应的DataTable里了。那要怎么转换呢?很简单,只需要把数据行从原来(数据类的数据容器)的表里面复制到ObjectList对应的DataTable里,然后将原来的行删除就行了。这里复制一行数据也是有学问的,因为一个DataRow一旦创建了,它就只能被加入到创建它的那个DataTable里,当它被加入到另外一个表里就会抛出它同时只能属于一个表的异常,而如果是DataRow里的数据一列一列地复制到另一个DataRow,就会对性能造成非常大的影响。最理想的办法就是数据不动,只改变DataRow记录的一个状态信息就行了。这里的改变行状态的办法就是NewRow,而数据不动的办法就是将源Row的ItemArray属性赋值给目的的ItemArray。经过测试,这样做可以减少1倍以上的时间成本(内存成本也一样)。

具体的添加方法如下:

同时增加一个反序列化的构造函数


 1与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集protected ObjectList(SerializationInfo info, StreamingContext context) : base()

 2与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_02与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_03        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

 3与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            m_dataTable = info.GetValue("DataTable", typeof(DataTable)) as DataTable;

 4与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            Type m_dataObjectType = info.GetValue("DataObjectType", typeof(Type)) as Type;

 5与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            if (m_dataObjectType != null)

 6与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12            与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{               

 7与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04                foreach (DataRow m_dr in m_dataTable.Rows)

 8与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12                与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

 9与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04                    m_list.Add(Activator.CreateInstance(m_dataObjectType, m_dr));

10与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31                }

11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31            }

12与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_06       }

13与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集


这样就可以支持序列化与反序列化了。

整个数据类的定义如下:


  1与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集[Serializable]

  2与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集    public class ObjectList1 : IList, ISerializable

  3与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_02与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_03    与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

  4与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        private ArrayList m_list = null;

  5与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        private DataTable m_dataTable = null;

  6与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        /**//// <summary>

  7与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// Initializes a new instance of the <see cref="T:ObjectList"/> class.

  8与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        /// </summary>

  9与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        public ObjectList1()

 10与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

 11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            m_list = new ArrayList();

 12与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

 13与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        /**//// <summary>

 14与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// Gets the data table form.

 15与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// </summary>

 16与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        /// <value>The data table form.</value>

 17与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        public DataTable DataTableForm

 18与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

 19与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12            get 与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{ return m_dataTable; }

 20与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

 21与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        private void AddObjectRowToListTable(IDataObject p_dataObject)

 22与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

 23与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            if (m_dataTable == null)

 24与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04                m_dataTable = p_dataObject.DataContainer.Clone();

 25与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            DataRow m_newRow = m_dataTable.NewRow();

 26与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

 27与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

 28与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            m_newRow.ItemArray = p_dataObject.ObjectRow.ItemArray;

 29与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12            /**//***********************************************

 30与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            * 使用上面代码时间性能会比下面的高一倍

 31与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            * for (int i = 0; i < p_dataObject.ObjectRow.ItemArray.Length; i++)

 32与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04               {

 33与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04               m_newRow[i] = p_dataObject.ObjectRow.ItemArray[i];

 34与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04               }

 35与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31            * ********************************************/

 36与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

 37与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            m_dataTable.Rows.Add(m_newRow);

 38与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            p_dataObject.ObjectRow.Delete();

 39与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            p_dataObject.ObjectRow.Table.AcceptChanges();

 40与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            p_dataObject.ObjectRow = m_newRow;

 41与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

 42与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11        IList Members#region IList Members

 43与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

 44与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        /**//// <summary>

 45与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// Adds an item to the <see cref="T:System.Collections.IList"></see>.

 46与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// </summary>

 47与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <param name="value">The <see cref="T:System.Object"></see> to add to the <see cref="T:System.Collections.IList"></see>.</param>

 48与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <returns>

 49与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// The position into which the new element was inserted.

 50与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// </returns>

 51与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        /// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.IList"></see> is read-only.-or- The <see cref="T:System.Collections.IList"></see> has a fixed size. </exception>

 52与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        public int Add(object value)

 53与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

 54与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            AddObjectRowToListTable((IDataObject)value);

 55与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            return this.m_list.Add(value);

 56与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

 57与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

 58与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        /**//// <summary>

 59与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// Removes all items from the <see cref="T:System.Collections.IList"></see>.

 60与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// </summary>

 61与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        /// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.IList"></see> is read-only. </exception>

 62与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        public void Clear()

 63与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

 64与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            this.m_list.Clear();

 65与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            this.DataTableForm.Clear();

 66与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

 67与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

 68与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        /**//// <summary>

 69与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// Determines whether the <see cref="T:System.Collections.IList"></see> contains a specific value.

 70与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// </summary>

 71与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <param name="value">The <see cref="T:System.Object"></see> to locate in the <see cref="T:System.Collections.IList"></see>.</param>

 72与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <returns>

 73与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// true if the <see cref="T:System.Object"></see> is found in the <see cref="T:System.Collections.IList"></see>; otherwise, false.

 74与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        /// </returns>

 75与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        public bool Contains(object value)

 76与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

 77与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            return m_list.Contains(value);

 78与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

 79与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

 80与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        /**//// <summary>

 81与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// Determines the index of a specific item in the <see cref="T:System.Collections.IList"></see>.

 82与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// </summary>

 83与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <param name="value">The <see cref="T:System.Object"></see> to locate in the <see cref="T:System.Collections.IList"></see>.</param>

 84与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <returns>

 85与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// The index of value if found in the list; otherwise, -1.

 86与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        /// </returns>

 87与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        public int IndexOf(object value)

 88与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

 89与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            return m_list.IndexOf(value);

 90与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

 91与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

 92与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        /**//// <summary>

 93与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// Inserts an item to the <see cref="T:System.Collections.IList"></see> at the specified index.

 94与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// </summary>

 95与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <param name="index">The zero-based index at which value should be inserted.</param>

 96与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <param name="value">The <see cref="T:System.Object"></see> to insert into the <see cref="T:System.Collections.IList"></see>.</param>

 97与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <exception cref="T:System.ArgumentOutOfRangeException">index is not a valid index in the <see cref="T:System.Collections.IList"></see>. </exception>

 98与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.IList"></see> is read-only.-or- The <see cref="T:System.Collections.IList"></see> has a fixed size. </exception>

 99与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        /// <exception cref="T:System.NullReferenceException">value is null reference in the <see cref="T:System.Collections.IList"></see>.</exception>

100与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        public void Insert(int index, object value)

101与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

102与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            this.m_list.Insert(index, value);

103与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            AddObjectRowToListTable((IDataObject)value);

104与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

105与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

106与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        /**//// <summary>

107与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// Gets a value indicating whether the <see cref="T:System.Collections.IList"></see> has a fixed size.

108与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// </summary>

109与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <value></value>

110与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        /// <returns>true if the <see cref="T:System.Collections.IList"></see> has a fixed size; otherwise, false.</returns>

111与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        public bool IsFixedSize

112与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

113与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12            get 与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{ return false; }

114与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

115与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

116与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        /**//// <summary>

117与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// Gets a value indicating whether the <see cref="T:System.Collections.IList"></see> is read-only.

118与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// </summary>

119与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <value></value>

120与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        /// <returns>true if the <see cref="T:System.Collections.IList"></see> is read-only; otherwise, false.</returns>

121与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        public bool IsReadOnly

122与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

123与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12            get 与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{ return false; }

124与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

125与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

126与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        /**//// <summary>

127与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// Removes the first occurrence of a specific object from the <see cref="T:System.Collections.IList"></see>.

128与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// </summary>

129与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <param name="value">The <see cref="T:System.Object"></see> to remove from the <see cref="T:System.Collections.IList"></see>.</param>

130与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        /// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.IList"></see> is read-only.-or- The <see cref="T:System.Collections.IList"></see> has a fixed size. </exception>

131与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        public void Remove(object value)

132与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

133与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            ((IDataObject)value).ObjectRow.Delete();

134与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            this.m_list.Remove(value);

135与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

136与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

137与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        /**//// <summary>

138与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// Removes the <see cref="T:System.Collections.IList"></see> item at the specified index.

139与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// </summary>

140与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <param name="index">The zero-based index of the item to remove.</param>

141与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <exception cref="T:System.ArgumentOutOfRangeException">index is not a valid index in the <see cref="T:System.Collections.IList"></see>. </exception>

142与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        /// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.IList"></see> is read-only.-or- The <see cref="T:System.Collections.IList"></see> has a fixed size. </exception>

143与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        public void RemoveAt(int index)

144与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

145与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            ((IDataObject)this.m_list[index]).ObjectRow.Delete();

146与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            this.m_list.RemoveAt(index);

147与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

148与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

149与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        /**//// <summary>

150与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// Gets or sets the <see cref="T:Object"/> at the specified index.

151与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// </summary>

152与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        /// <value></value>

153与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        public object this[int index]

154与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

155与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12            get 与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{ return this.m_list[index]; }

156与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            set

157与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12            与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

158与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04                throw new Exception("The method or operation is not implemented.");

159与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31            }

160与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

161与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

162与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        #endregion

163与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

164与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11        ICollection Members#region ICollection Members

165与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

166与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        /**//// <summary>

167与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// Copies the elements of the <see cref="T:System.Collections.ICollection"></see> to an <see cref="T:System.Array"></see>, starting at a particular <see cref="T:System.Array"></see> index.

168与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// </summary>

169与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <param name="array">The one-dimensional <see cref="T:System.Array"></see> that is the destination of the elements copied from <see cref="T:System.Collections.ICollection"></see>. The <see cref="T:System.Array"></see> must have zero-based indexing.</param>

170与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <param name="index">The zero-based index in array at which copying begins.</param>

171与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <exception cref="T:System.ArgumentNullException">array is null. </exception>

172与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <exception cref="T:System.ArgumentOutOfRangeException">index is less than zero. </exception>

173与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <exception cref="T:System.ArgumentException">array is multidimensional.-or- index is equal to or greater than the length of array.-or- The number of elements in the source <see cref="T:System.Collections.ICollection"></see> is greater than the available space from index to the end of the destination array. </exception>

174与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        /// <exception cref="T:System.InvalidCastException">The type of the source <see cref="T:System.Collections.ICollection"></see> cannot be cast automatically to the type of the destination array. </exception>

175与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        public void CopyTo(Array array, int index)

176与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

177与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            this.m_list.CopyTo(array, index);

178与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

179与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

180与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        /**//// <summary>

181与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// Gets the number of elements contained in the <see cref="T:System.Collections.ICollection"></see>.

182与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// </summary>

183与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <value></value>

184与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        /// <returns>The number of elements contained in the <see cref="T:System.Collections.ICollection"></see>.</returns>

185与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        public int Count

186与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

187与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12            get 与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{ return this.m_list.Count; }

188与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

189与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

190与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        /**//// <summary>

191与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// Gets a value indicating whether access to the <see cref="T:System.Collections.ICollection"></see> is synchronized (thread safe).

192与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// </summary>

193与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <value></value>

194与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        /// <returns>true if access to the <see cref="T:System.Collections.ICollection"></see> is synchronized (thread safe); otherwise, false.</returns>

195与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        public bool IsSynchronized

196与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

197与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12            get 与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{ return false; }

198与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

199与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

200与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        /**//// <summary>

201与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// Gets an object that can be used to synchronize access to the <see cref="T:System.Collections.ICollection"></see>.

202与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// </summary>

203与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <value></value>

204与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        /// <returns>An object that can be used to synchronize access to the <see cref="T:System.Collections.ICollection"></see>.</returns>

205与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        public object SyncRoot

206与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

207与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12            get 与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{ return this.m_list.SyncRoot; }

208与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

209与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

210与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        #endregion

211与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

212与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11        IEnumerable Members#region IEnumerable Members

213与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

214与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        /**//// <summary>

215与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// Returns an enumerator that iterates through a collection.

216与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// </summary>

217与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// <returns>

218与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        /// An <see cref="T:System.Collections.IEnumerator"></see> object that can be used to iterate through the collection.

219与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        /// </returns>

220与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        public IEnumerator GetEnumerator()

221与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

222与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            return m_list.GetEnumerator();

223与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

224与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

225与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        #endregion

226与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

227与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        protected ObjectList1(SerializationInfo info, StreamingContext context)

228与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

229与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            m_dataTable = info.GetValue("DataTable", typeof(DataTable)) as DataTable;

230与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            Type m_dataObjectType = info.GetValue("DataObjectType", typeof(Type)) as Type;

231与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            if (m_dataObjectType != null)

232与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12            与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

233与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04                m_list = new ArrayList();

234与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04                foreach (DataRow m_dr in m_dataTable.Rows)

235与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12                与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

236与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04                    m_list.Add(Activator.CreateInstance(m_dataObjectType,m_dr));

237与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31                }

238与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31            }

239与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

240与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11        ISerializable Members#region ISerializable Members

241与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

242与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04        public void GetObjectData(SerializationInfo info, StreamingContext context)

243与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

244与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            if (m_list.Count >= 0)

245与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12            与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

246与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04                info.AddValue("DataObjectType", this.m_list[0].GetType());

247与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31            }

248与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

249与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            info.AddValue("DataTable", this.m_dataTable, typeof(DataTable));

250与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        }

251与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

252与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31        #endregion

253与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_06    }


上面的数据类肯定还存在一些问题,目前没有更深入地去研究,有些地方可能还不是很合理,随着应用的深入,仍需要做一些改进。最后,如果认为这样使用很不爽,不能做到强类型的引用。所有的对象都只能认识到DataObjectBase这一级类型(因为所有的数据类都是这个抽象里继承下来)。我们可以定义一个泛型的集合对它进行包装,这里就不多做介绍了。


 1与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集private void AddObjectRowToListTable(IDataObject p_dataObject)

 2与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_02与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_03        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

 3与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            if (m_dataTable == null)

 4与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04                m_dataTable = p_dataObject.DataContainer.Clone();

 5与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            DataRow m_newRow = m_dataTable.NewRow();

 6与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            m_newRow.ItemArray = p_dataObject.ObjectRow.ItemArray;

 7与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12            /**//***********************************************

 8与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            * 使用上面代码时间性能会比下面的高一倍

 9与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            * for (int i = 0; i < p_dataObject.ObjectRow.ItemArray.Length; i++)

10与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04               {

11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04               m_newRow[i] = p_dataObject.ObjectRow.ItemArray[i];

12与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04               }

13与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31            * ********************************************/

14与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

15与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            m_dataTable.Rows.Add(m_newRow);

16与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            p_dataObject.ObjectRow.Delete();

17与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            p_dataObject.ObjectRow.Table.AcceptChanges();

18与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            p_dataObject.ObjectRow = m_newRow;

19与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_06        }

20与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集


下一个就是序列化的问题了。序列化集合类好像比较麻烦,因为它本身并没有为我提供支持序列化的方法。而在这个数据集合里,实现了ISerializable接口,由我们自己来定义要序列的方式。我们的关键是序列化数据,所以就这里的序列化就只需要序列ObjectList对应的DataTable就行了。实现ISerializable接口如下:


 1与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集public void GetObjectData(SerializationInfo info, StreamingContext context)

 2与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_02与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_03        与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

 3与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            if (this.Count >= 0)

 4与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集_11与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_12            与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_10{

 5与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04                info.AddValue("DataObjectType", m_list[0].GetType());  //当前数据类的类型

 6与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据_31            }

 7与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04

 8与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_04            info.AddValue("DataTable", this.m_dataTable, typeof(DataTable));

 9与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_序列化_06        }

10与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable_数据集