C#的DataRow.ItemArray属性详解2014-10-07DataRow.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]);}}}
异常:

本文URL:http://www.bianceng.cn/Programming/csharp/201410/45585.htmDataRow.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();}}