C# DataRow 学习总结

来源:互联网 发布:淘宝客服管理方案 编辑:程序博客网 时间:2024/05/19 06:39

C# DataRow

http://www.cnblogs.com/fengkuangshubiaodian/archive/2012/08/01/2609911.html


  DataRow 模拟的是数据库中的一行。使用 HasVersion 和 IsNull 属性确定特定行值的状态。


1. 添加行
  创建新的 DataRow,要使用 DataTable 对象的 NewRow 方法。然后,使用 Add 方法将新的 DataRow 添加到 DataRowCollection 中。最后,调用 DataTable 对象的 AcceptChanges 方法以确认是否已添加。具体描述参考我另一篇文章 C# DataTable。


private void CreateNewDataRow()
{
    // Use the MakeTable function below to create a new table.
    DataTable table;
    table = MakeNamesTable();


    // Once a table has been created, use the 
    // NewRow to create a DataRow.
    DataRow row;
    row = table.NewRow();


    // Then add the new row to the collection.
    row["fName"] = "John";
    row["lName"] = "Smith";
    table.Rows.Add(row);


    foreach(DataColumn column in table.Columns)
        Console.WriteLine(column.ColumnName);
    dataGrid1.DataSource=table;
}


private DataTable MakeNamesTable()
{
    // Create a new DataTable titled 'Names.'
    DataTable namesTable = new DataTable("Names"); 


    // Add three column objects to the table.
    DataColumn idColumn = new  DataColumn();
    idColumn.DataType = System.Type.GetType("System.Int32");
    idColumn.ColumnName = "id";
    idColumn.AutoIncrement = true;
    namesTable.Columns.Add(idColumn);


    DataColumn fNameColumn = new DataColumn();
    fNameColumn.DataType = System.Type.GetType("System.String");
    fNameColumn.ColumnName = "Fname";
    fNameColumn.DefaultValue = "Fname";
    namesTable.Columns.Add(fNameColumn);


    DataColumn lNameColumn = new DataColumn();
    lNameColumn.DataType = System.Type.GetType("System.String");
    lNameColumn.ColumnName = "LName";
    namesTable.Columns.Add(lNameColumn);


    // Create an array for DataColumn objects.
    DataColumn [] keys = new DataColumn [1];
    keys[0] = idColumn;
    namesTable.PrimaryKey = keys;


    // Return the new DataTable.
    return namesTable;
}


///////////////////////////////////////////////////////
DataRow workRow;
for (int i = 0; i <= 9; i++) 
{
  workRow = workTable.NewRow();
  workRow[0] = i;
  workRow[1] = "CustName" + i.ToString();
  workTable.Rows.Add(workRow);
}


2. 删除行
  您可通过调用 DataRowCollection 的 Remove 方法或调用 DataRow 对象的 Delete 方法,从 DataRowCollection 中删除 DataRow。Remove 方法将行从集合中移除。与此相反,Delete 标记要移除的 DataRow。在调用AcceptChanges 方法时发生实际移除。通过调用 Delete,您可在实际删除行之前以编程方式检查哪些行被标记为移除。具体描述参考我另外一篇文章 C# DataTable。


private void DemonstrateAcceptChanges()
{
    //Run a function to create a DataTable with one column.
    DataTable table = MakeTable();
    DataRow row;


    // Create a new DataRow.
    row = table.NewRow();
    // Detached row.
    Console.WriteLine("New Row " + row.RowState);


    table.Rows.Add(row);
    // New row.
    Console.WriteLine("AddRow " + row.RowState);


    table.AcceptChanges();
    // Unchanged row.
    Console.WriteLine("AcceptChanges " + row.RowState);


    row["FirstName"] = "Scott";
    // Modified row.
    Console.WriteLine("Modified " + row.RowState);


    row.Delete();
    // Deleted row.
    Console.WriteLine("Deleted " + row.RowState);
}


private DataTable MakeTable()
{
    // Make a simple table with one column.
    DataTable table = new DataTable("table");
    DataColumn fnameColumn = new DataColumn(
        "FirstName", Type.GetType("System.String"));
    table.Columns.Add(fnameColumn);
    return table;
}
========

C# DataRow类的使用方法

http://blog.csdn.net/assieu/article/details/5822805
     使用 DataRow 对象及其属性和方法检索、评估、插入、删除和更新 DataTable 中的值。DataRowCollection 表示 DataTable 中的实际 DataRow 对象。


    若要创建新的 DataRow,请使用 DataTable 对象的 NewRow 方法。创建新的 DataRow 之后,请使用 Add 方法将新的 DataRow 添加到 DataRowCollection 中。最后,调用 DataTable 对象的 AcceptChanges 方法以确认是否已添加。


    还可通过调用 DataRowCollection 的 Remove 方法或调用 DataRow 对象的 Delete 方法,从 DataRowCollection 中删除 DataRow。Remove 方法将行从集合中移除。与此相反,Delete 标记要移除的 DataRow。在调用 AcceptChanges 方法时发生实际移除。通过调用 Delete,可在实际删除行之前以编程方式检查哪些行被标记为移除。


下面的示例通过调用 DataTable 对象的 NewRow 方法创建新的 DataRow。


[c-sharp]
private void CreateNewDataRow()  
{  
    // Use the MakeTable function below to create a new table.  
    DataTable table;  
    table = MakeNamesTable();  
  
    // Once a table has been created, use the   
    // NewRow to create a DataRow.  
    DataRow row;  
    row = table.NewRow();  
  
    // Then add the new row to the collection.  
    row["fName"] = "John";  
    row["lName"] = "Smith";  
    table.Rows.Add(row);  
  
    foreach(DataColumn column in table.Columns)  
        Console.WriteLine(column.ColumnName);  
    dataGrid1.DataSource=table;  
}  
  
private DataTable MakeNamesTable()  
{  
    // Create a new DataTable titled 'Names.'  
    DataTable namesTable = new DataTable("Names");   
  
    // Add three column objects to the table.  
    DataColumn idColumn = new  DataColumn();  
    idColumn.DataType = System.Type.GetType("System.Int32");  
    idColumn.ColumnName = "id";  
    idColumn.AutoIncrement = true;  
    namesTable.Columns.Add(idColumn);  
  
    DataColumn fNameColumn = new DataColumn();  
    fNameColumn.DataType = System.Type.GetType("System.String");  
    fNameColumn.ColumnName = "Fname";  
    fNameColumn.DefaultValue = "Fname";  
    namesTable.Columns.Add(fNameColumn);  
  
    DataColumn lNameColumn = new DataColumn();  
    lNameColumn.DataType = System.Type.GetType("System.String");  
    lNameColumn.ColumnName = "LName";  
    namesTable.Columns.Add(lNameColumn);  
  
    // Create an array for DataColumn objects.  
    DataColumn [] keys = new DataColumn [1];  
    keys[0] = idColumn;  
    namesTable.PrimaryKey = keys;  
  
    // Return the new DataTable.  
    return namesTable;  
}  
========

DataRow 类

https://msdn.microsoft.com/zh-cn/library/system.data.datarow(VS.80).aspx
.NET Framework 2.0 其他版本 
表示 DataTable 中的一行数据。
命名空间:System.Data
程序集:System.Data(在 system.data.dll 中)
语法
C#C++VB
public class DataRow
J#
public class DataRow
JScript
public class DataRow
备注
DataRow 和 DataColumn 对象是 DataTable 的主要组件。使用 DataRow 对象及其属性和方法检索、评估、插入、删除和更新 DataTable 中的值。DataRowCollection 表示 DataTable 中的实际 DataRow 对象,DataColumnCollection 中包含用于描述 DataTable 的架构的 DataColumn 对象。使用重载的 Item 属性返回或设置 DataColumn 的值。
使用 HasVersion 和 IsNull 属性确定特定行值的状态,使用 RowState 属性确定行相对于它的父级 DataTable 的状态。
若要创建新的 DataRow,请使用 DataTable 对象的 NewRow 方法。创建新的 DataRow 之后,请使用 Add 方法将新的 DataRow 添加到 DataRowCollection 中。最后,调用 DataTable 对象的 AcceptChanges 方法以确认是否已添加。有关将数据添加到 DataTable 中的更多信息,请参见 将数据添加到表中。
您可通过调用 DataRowCollection 的 Remove 方法或调用 DataRow 对象的 Delete 方法,从 DataRowCollection 中删除 DataRow。Remove 方法将行从集合中移除。与此相反,Delete 标记要移除的 DataRow。在调用 AcceptChanges 方法时发生实际移除。通过调用 Delete,您可在实际删除行之前以编程方式检查哪些行被标记为移除。有关更多信息,请参见 从表中删除行。
示例
下面的示例通过调用 DataTable 对象的 NewRow 方法创建新的 DataRow。
C#VB
private void CreateNewDataRow()
{
    // Use the MakeTable function below to create a new table.
    DataTable table;
    table = MakeNamesTable();


    // Once a table has been created, use the 
    // NewRow to create a DataRow.
    DataRow row;
    row = table.NewRow();


    // Then add the new row to the collection.
    row["fName"] = "John";
    row["lName"] = "Smith";
    table.Rows.Add(row);


    foreach(DataColumn column in table.Columns)
        Console.WriteLine(column.ColumnName);
    dataGrid1.DataSource=table;
}
 
private DataTable MakeNamesTable()
{
    // Create a new DataTable titled 'Names.'
    DataTable namesTable = new DataTable("Names"); 


    // Add three column objects to the table.
    DataColumn idColumn = new  DataColumn();
    idColumn.DataType = System.Type.GetType("System.Int32");
    idColumn.ColumnName = "id";
    idColumn.AutoIncrement = true;
    namesTable.Columns.Add(idColumn);


    DataColumn fNameColumn = new DataColumn();
    fNameColumn.DataType = System.Type.GetType("System.String");
    fNameColumn.ColumnName = "Fname";
    fNameColumn.DefaultValue = "Fname";
    namesTable.Columns.Add(fNameColumn);


    DataColumn lNameColumn = new DataColumn();
    lNameColumn.DataType = System.Type.GetType("System.String");
    lNameColumn.ColumnName = "LName";
    namesTable.Columns.Add(lNameColumn);


    // Create an array for DataColumn objects.
    DataColumn [] keys = new DataColumn [1];
    keys[0] = idColumn;
    namesTable.PrimaryKey = keys;


    // Return the new DataTable.
    return namesTable;
}


继承层次结构
System.Object 
  System.Data.DataRow
线程安全
该类型对于多线程读操作是安全的。您必须使任何写操作同步。
平台
Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition
.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求。
版本信息
.NET Framework
受以下版本支持:2.0、1.1、1.0
.NET Compact Framework
受以下版本支持:2.0、1.0
请参见
参考
DataRow 成员
System.Data 命名空间
AcceptChanges
Add
DataColumnCollection 类
DataColumn 类
DataRowView
DataTable
HasVersion
IsNull
Item
NewRow
DataRowCollection
========

C# DataRow实例化  

http://blog.163.com/zhaoyanping_1125/blog/static/20132915320123121128356/


DataRow dr = new DataRow();  这样是不能将DataRow实例化的。


要实例化一个DataRow首先要实例化一个DataTable要确定DataRow的结构如:
DataTable dt = new DataTable();
dt.Column.Add("C1");  
dt.Column.Add("C2");
...
DataRow dr = dt.NewRow(); 


DataRow的构造函数:
protected internal DataRow (
DataRowBuilder builder
)


你看见了,他是一个受保护的internal类。
internal 关键字是类型和类型成员的访问修饰符。只有在同一程序集的文件中,内部类型或成员才是可访问的。


 一、ms这么做是有他的隐含意思在里面的:
一个table和他对应的row应该是有相同结构的,为了保证他们结构相同,就必须按照一个统一标准来规范他们.要么用table来规范row,那么让row去格式化table,ms选择了前一种方式,这里他们又隐含一层意思,那就是生成的顺序,table比row先生成.


所以为了严格保证这种规范和生成顺序,该构造函数就限制成了protected internal ,ok了,这么做,你就是想把table和row结构不对应都不成了,因为他没有留给你任何犯错的机会


二、从上面的构造函数可以看出,实际上row结构的创建是DataRowBuilder类负责的,而不是datarow类,datarow类实际负责对row的操作而不是创建。
========
0 0
原创粉丝点击