/// <summary> /// 用于触发 DataColumnAdded 事件。 /// </summary> /// <param name="Column">与 DataColumnAdded 事件相关的数据列对象。</param> protected virtual void OnDataColumnAdded(SpeedDataColumn Column) { if (DataColumnAdded != null) { DataColumnAdded(Table, Column); } }
/// <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; } }
/// <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); }
/// <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); }
/// <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; }