• 技术文章 >后端开发 >C#.Net教程

    C# DataRow.ItemArray 属性

    黄舟黄舟2017-02-21 11:03:14原创3027
    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 属性的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:C# DataRow.ItemArray
    上一篇:C# FileStream.Read Method 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • c语言中goto语句的含义是什么• C/C++深度分析• C#中GDI+编程10个基本技巧二• 应用绝对路径与相对路径• ASP.NET使用Ajax如何返回Json对象的方法具体介绍
    1/1

    PHP中文网