/// <summary>
 /// 用于触发 DataColumnAdded 事件。
 /// </summary>
 /// <param name="Column">与 DataColumnAdded 事件相关的数据列对象。</param>
 protected virtual void OnDataColumnAdded(SpeedDataColumn Column)
 {
     if (DataColumnAdded != null)
     {
         DataColumnAdded(Table, Column);
     }
 }
示例#2
0
 /// <summary>
 /// 获取该行上指定列的数据。
 /// </summary>
 /// <param name="ColumnName">列名称。</param>
 /// <returns></returns>
 public object this[string ColumnName]
 {
     get
     {
         DataCell Cell = FindCell(ColumnName);
         return(Cell.Value);
     }
     set
     {
         DataCell Cell = FindCell(ColumnName);
         if (Cell == null)
         {
             SpeedDataColumn Column = Table.Columns[ColumnName];
             Cell = Add(Column, value);
             OnPropertyChanged(ColumnName);
         }
         else
         {
             if (Cell.Column.DataType.IsValueType && value == null)
             {
                 Cell.Value = Activator.CreateInstance(Cell.Column.DataType);
             }
             else
             {
                 Cell.Value = value;
             }
             OnPropertyChanged(ColumnName);
         }
     }
 }
 /// <summary>
 /// 返回指定字段为空时默认值
 /// </summary>
 /// <param name="Column">该字段的列对象。</param>
 /// <returns></returns>
 private object GetFieldNullValue(SpeedDataColumn Column)
 {
     //if (Column.DataType.IsValueType)
     //    return Activator.CreateInstance(Column.DataType);
     //else
     //    return "null";
     return("null");
 }
        /// <summary>
        /// 从集合中移除一个元素。
        /// </summary>
        /// <param name="item">要移除的元素。</param>
        /// <returns></returns>
        public void Remove(SpeedDataColumn item)
        {
            int Index = item.Index;

            Items.Remove(item);
            ColumnsHashTable.Remove(item.Name);
            if (Index < (Items.Count - 1))
            {
                RearrangeColumnIndex(Index + 1);
            }
            OnDataColumnRemoved(Index);
        }
 /// <summary>
 /// 当在数据列集合中添加一个新列时要进行的处理。
 /// </summary>
 /// <param name="sender">触发事件的表。</param>
 /// <param name="Column">被添加的数据列对象。</param>
 private void DataColumns_DataColumnAdded(SpeedDataTable sender, SpeedDataColumn Column)
 {
     if (this.Count < 1)
     {
         return;
     }
     // 当列被加入时,所有行的该列索引处都应该插入一个单元格。否则单元格与列将会错位。
     foreach (SpeedDataRow Row in this)
     {
         Row.CreateNewCell(Column);
         Row[Column.Index] = Column.DefaultValue;
     }
 }
示例#6
0
        /// <summary>
        /// 向数据行中添加一个数据单元格。
        /// </summary>
        /// <param name="Column">该数据单元格所属的列对象。</param>
        /// <param name="Value"></param>
        protected DataCell Add(SpeedDataColumn Column, object Value)
        {
            if (Value != null && !(Value.GetType().Equals(Column.DataType)))
            {
                throw (new Exception("Data type is inconsistent."));
            }
            DataCell Cell = new DataCell();

            Cell.Column = Column;
            Cell.Value  = Value;
            CellAddressHashTable.Add(Column.Name, Cell);
            DataCells.Add(Cell);
            return(Cell);
        }
示例#7
0
        /// <summary>
        /// 为新列创建一个数据单元格(此方法不可让外部程序集使用)。
        /// </summary>
        /// <param name="Column">数据新单元格所属的列。</param>
        internal void CreateNewCell(SpeedDataColumn Column)
        {
            DataCell Cell = new DataCell(Column, Column.DefaultValue);

            CellAddressHashTable.Add(Column.Name, Cell);
            if (Column.Index >= DataCells.Count)
            {
                DataCells.Add(Cell);
            }
            else
            {
                DataCells.Insert(Column.Index, Cell);
            }
        }
        /// <summary>
        /// 添加一个新列到集合结尾。
        /// </summary>
        /// <param name="item">新的列对象。</param>
        public void Add(SpeedDataColumn item)
        {
            if (item == null)
            {
                return;
            }
            if (ColumnsHashTable.ContainsKey(item.Name))
            {
                return;
            }

            ColumnsHashTable.Add(item.Name, item);
            Items.Add(item);
            item.Index = Items.Count - 1;
            OnDataColumnAdded(item);
        }
        /// <summary>
        /// 添加一个数据列。
        /// </summary>
        /// <param name="Name">列名称。</param>
        /// <param name="DataType">该列的数据类型。</param>
        /// <param name="defaultValue">该列的默认值。</param>
        public void Add(string Name, Type DataType, object defaultValue = null)
        {
            if (ColumnsHashTable.ContainsKey(Name))
            {
                return;
            }

            SpeedDataColumn Column = new SpeedDataColumn();

            Column.Name         = Name;
            Column.DataType     = DataType;
            Column.DefaultValue = defaultValue;
            ColumnsHashTable.Add(Column.Name, Column);
            Items.Add(Column);
            Column.Index = Items.Count - 1;
            OnDataColumnAdded(Column);
        }
        /// <summary>
        /// 在集合中的指定位置插入一个新的元素。
        /// </summary>
        /// <param name="index">在该索引处插入元素。</param>
        /// <param name="item">新插入的元素对象。</param>
        public void Insert(int index, SpeedDataColumn item)
        {
            if (item == null)
            {
                return;
            }
            if (ColumnsHashTable.ContainsKey(item.Name))
            {
                return;
            }

            item.Index = index;
            Items.Insert(index, item);
            ColumnsHashTable.Add(item.Name, item);
            RearrangeColumnIndex(index + 1);
            OnDataColumnAdded(item);
        }
示例#11
0
 /// <summary>
 /// 创建一个数据单元格。
 /// </summary>
 /// <param name="OwnerColumn">所属的列。</param>
 /// <param name="Val">值。</param>
 public DataCell(SpeedDataColumn OwnerColumn, object Val)
 {
     Column = OwnerColumn;
     Value  = Val;
 }
 /// <summary>
 /// 创建一个 <see cref="Wunion.DataAdapter.Kernel.DataCollection.SpeedDataProperty"/> 的对象实例。
 /// </summary>
 /// <param name="column">属性的名称。</param>
 /// <param name="attributes">包含属性特性的类型 System.Attribute 的数组。</param>
 public SpeedDataProperty(SpeedDataColumn column, Attribute[] attributes) : base(column.Name, attributes)
 {
     mDataColumn = column;
 }