C# DataRow.ItemArray 属性

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-1 11:40   839   0
DataRow.ItemArray 属性
通过一个数组来获取或设置此行的所有值。
命名空间:System.Data

程序集:System.Data(在 system.data.dll 中)

代码示例:

private void CreateRowsWithItemArray()
{
    // Make a DataTable using the function below.
    DataTable dt = MakeTableWithAutoIncrement();
    DataRow relation;
    // Declare the array variable.
    object [] rowArray = new object[2];
    // Create 10 new rows and add to DataRowCollection.
    for(int i = 0; i <10; i++)
    {
        rowArray[0]=null;
        rowArray[1]= "item " + i;
        relation = dt.NewRow();
        relation.ItemArray = rowArray;
        dt.Rows.Add(relation);
    }
    PrintTable(dt);
}
 
private DataTable MakeTableWithAutoIncrement()
{
    // Make a table with one AutoIncrement column.
    DataTable table = new DataTable("table");
    DataColumn idColumn = new DataColumn("id", 
        Type.GetType("System.Int32"));
    idColumn.AutoIncrement = true;
    idColumn.AutoIncrementSeed = 10;
    table.Columns.Add(idColumn);

    DataColumn firstNameColumn = new DataColumn("Item", 
        Type.GetType("System.String"));
    table.Columns.Add(firstNameColumn);
    return table;
}
 
private void PrintTable(DataTable table)
{
    foreach(DataRow row in table.Rows)
    {
        foreach(DataColumn column in table.Columns)
        {
            Console.WriteLine(row[column]);
        }
    }
}
异常:

异常类型 条件

ArgumentException

数组大于表中的列数。

InvalidCastException

数组中的值与其相应的DataColumn中的DataType不匹配。

ConstraintException

编辑破坏了约束。

ReadOnlyException

编辑试图更改只读列的值。

NoNullAllowedException

编辑试图将空值放在DataColumn对象的AllowDBNull为 false 的列中。

DeletedRowInaccessibleException

该行已被删除。

DataRow.ItemArray 属性源代码实现:

public object[] ItemArray
{
 get
 {
  int defaultRecord = this.GetDefaultRecord();
  object[] array = new object[this._columns.Count];
  for (int i = 0; i < array.Length; i++)
  {
   DataColumn dataColumn = this._columns[i];
   array[i] = dataColumn[defaultRecord];
  }
  return array;
 }
 set
 {
  if (value == null)
  {
   throw ExceptionBuilder.ArgumentNull("ItemArray");
  }
  if (this._columns.Count < value.Length)
  {
   throw ExceptionBuilder.ValueArrayLength();
  }
  DataColumnChangeEventArgs dataColumnChangeEventArgs = null;
  if (this._table.NeedColumnChangeEvents)
  {
   dataColumnChangeEventArgs = new DataColumnChangeEventArgs(this);
  }
  bool flag = this.BeginEditInternal();
  for (int i = 0; i < value.Length; i++)
  {
   if (value[i] != null)
   {
    DataColumn dataColumn = this._columns[i];
    if (-1L != this.rowID && dataColumn.ReadOnly)
    {
     throw ExceptionBuilder.ReadOnly(dataColumn.ColumnName);
    }
    if (dataColumnChangeEventArgs != null)
    {
     dataColumnChangeEventArgs.InitializeColumnChangeEvent(dataColumn, value[i]);
     this._table.OnColumnChanging(dataColumnChangeEventArgs);
    }
    if (dataColumn.Table != this._table)
    {
     throw ExceptionBuilder.ColumnNotInTheTable(dataColumn.ColumnName, this._table.TableName);
    }
    if (-1L != this.rowID && dataColumn.ReadOnly)
    {
     throw ExceptionBuilder.ReadOnly(dataColumn.ColumnName);
    }
    if (this.tempRecord == -1)
    {
     this.BeginEditInternal();
    }
    object obj = (dataColumnChangeEventArgs != null) ? dataColumnChangeEventArgs.ProposedValue : value[i];
    if (obj == null)
    {
     if (dataColumn.IsValueType)
     {
      throw ExceptionBuilder.CannotSetToNull(dataColumn);
     }
     obj = DBNull.Value;
    }
    try
    {
     int proposedRecordNo = this.GetProposedRecordNo();
     dataColumn[proposedRecordNo] = obj;
    }
    catch (Exception e)
    {
     if (ADP.IsCatchableOrSecurityExceptionType(e) && flag)
     {
      this.CancelEdit();
     }
     throw;
    }
    this.LastChangedColumn = dataColumn;
    if (dataColumnChangeEventArgs != null)
    {
     this._table.OnColumnChanged(dataColumnChangeEventArgs);
    }
   }
  }
  this.EndEdit();
 }
}


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP