1. 程式人生 > >C# 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的操作而不是建立。
========