天天看點

C# DataRow 學習總結C# DataRowC# DataRow類的使用方法DataRow 類C# DataRow執行個體化  

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的操作而不是建立。

========

繼續閱讀