C# DataRow.ItemArray 属性

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();
	}
}
时间: 2024-12-23 07:10:03

C# DataRow.ItemArray 属性的相关文章

C#的DataRow.ItemArray属性详解

DataRow.ItemArray 属性 通过一个数组来获取或设置此行的所有值. 命名空间:System.Data 程序集:System.Data(在 system.data.dll 中) 代码示例: private void CreateRowsWithItemArray() { // Make a DataTable using the function below. DataTable dt = MakeTableWithAutoIncrement(); DataRow relation;

ADO.NET读书笔记系列之------DataSet对象

ado|笔记|对象 一.特点介绍 1.处理脱机数据,在多层应用程序中很有用. 2.可以在任何时候查看DataSet中任意行的内容,允许修改查询结果的方法. 3.处理分级数据 4.缓存更改 5.XML的完整性:DataSet对象和XML文档几乎是可互换的. 二.使用介绍 1.创建DataSet对象:DataSet ds = new DataSet("DataSetName"); 2.查看调用SqlDataAdapter.Fill创建的结构     da.Fill(ds,"Ord

在Microsoft Office System中使用ADO.NET数据集(四)

ado|数据 在Office文档中使用DataSet中的数据 一旦DataSet中填充完毕你所需要的数据,并且断开了数据库连接,你就有多种方法在各种Office文档中使用这些数据.Microsoft Office System本质上不能处理大多数基于.NET的对象,因此,通常你必须使用COM互用性(COM interoperability)来维护这些数据,并将这些数据转换为你希望添入的工作表或其他文档所能识别的数据类型.你可以在Microsoft Office System使用它新集成的XML功

DataGrid相关知识总结(收集)

datagrid 关于datagrid的问题,如何使行宽不可由用户更改.(即行宽固定,不能通过拖拉的方式改变)定义DataGrid的时候就把宽度设定<asp:BoundColumn ...> <HeaderStyle Width="150px"></HeaderStyle> 如何在winform中DataGrid点击某行,使数据实时显示在TEXTBOX中?datagrid的keypress事件中 textbox1.text=mydatagrid(my

使用 ADO.NET 解锁 Microsoft Access 数据(2)

access|ado|数据 使用 DataReader 对象以仅向前移动的.只读的格式访问数据很多时候,您只是希望简单地浏览数据,而并不需要在数据间来回浏览,也不需要更改数据(我们将此称为"流水数据").ADO.NET 的 DataReader 对象是专门为此设计的.下面是我编写的一段示例代码,可以逐个读取连接的数据库中的所有选定数据: ' Visual Basic .NET 代码.' 控制台应用程序.' 引用:'   System'   System.Data'   System.X

使用ADO.NET解锁 Microsoft Access数据(二)

access|ado|数据 数据表单向导 Visual Studio .NET 数据表单向导允许您快速连接到数据库,并生成简单的用户界面,用于显示数据并与数据进行交互.要使用数据表单向导,请执行以下步骤: 在 Windows 应用程序项目中,在 Project(项目)菜单上,单击 Add Windows Form(添加 Windows 窗体). 在 Templates(模板)窗格中,单击 Data Form Wizard(数据窗体向导),单击 Open(打开),然后单击 Next(下一步). 在

与DotNet数据对象结合的自定义数据对象设计(二) 数据集合与DataTable

在上篇Blog中介绍了如何定义一个与DataRow相结合的数据类,那么本篇将介绍如何定义一个与 DataTable对应的数据集合. 在DotNet中提供了一个CollectionBase作为我们定义强类型的数据集合的抽象类,在DotNet1.1中要定 义一个强类型的数据集合就必须为每一种数据类定义一个对应的数据集合,在2.0中增加了泛型的功能后 ,这个问题得到了解决.又由于在目前的Ibatisnet版本中还不支持泛型的功能,所以数据集合可以选择 从ArrayList或CollectionBase

C#常用操作操作方法

本文章转载:http://www.cnblogs.com/Gyoung/archive/2012/05/08/2489585.html   .NET中有些方法以前没有接触过,但用过了之后让人眼前一亮,哇,原来你这么好用. 下面就说说被我忽视过的方法.当然,每个人的编程经历,涉猎面及对.NET的认知程度都不一样.所以,这只是一家之言,肯定有很多不足之处,欢迎大家批评指正. 1. ADO.NET类 DataTable.Merge() 如何合并两张表?自己以前写的方法: private void Un

DataSet用法详细 转

一.特点介绍 1.处理脱机数据,在多层应用程序中很有用.2.可以在任何时候查看DataSet中任意行的内容,允许修改查询结果的方法.3.处理分级数据4.缓存更改5.XML的完整性:DataSet对象和XML文档几乎是可互换的. 二.使用介绍 1.创建DataSet对象: DataSetds = new DataSet("DataSetName"); 2.查看调用SqlDataAdapter.Fill创建的结构 da.Fill(ds,"Orders"); DataTa