您的位置:首页 > 编程语言 > C#

C# DataRow.ItemArray 属性

2014-03-04 14:15 281 查看
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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C# DataRow ItemArray 属性