[C#] DataRow类的使用方法

  使用 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]  view plain  copy
  1. private void CreateNewDataRow()  
  2. {  
  3.     // Use the MakeTable function below to create a new table.  
  4.     DataTable table;  
  5.     table = MakeNamesTable();  
  6.   
  7.     // Once a table has been created, use the   
  8.     // NewRow to create a DataRow.  
  9.     DataRow row;  
  10.     row = table.NewRow();  
  11.   
  12.     // Then add the new row to the collection.  
  13.     row["fName"] = "John";  
  14.     row["lName"] = "Smith";  
  15.     table.Rows.Add(row);  
  16.   
  17.     foreach(DataColumn column in table.Columns)  
  18.         Console.WriteLine(column.ColumnName);  
  19.     dataGrid1.DataSource=table;  
  20. }  
  21.   
  22. private DataTable MakeNamesTable()  
  23. {  
  24.     // Create a new DataTable titled 'Names.'  
  25.     DataTable namesTable = new DataTable("Names");   
  26.   
  27.     // Add three column objects to the table.  
  28.     DataColumn idColumn = new  DataColumn();  
  29.     idColumn.DataType = System.Type.GetType("System.Int32");  
  30.     idColumn.ColumnName = "id";  
  31.     idColumn.AutoIncrement = true;  
  32.     namesTable.Columns.Add(idColumn);  
  33.   
  34.     DataColumn fNameColumn = new DataColumn();  
  35.     fNameColumn.DataType = System.Type.GetType("System.String");  
  36.     fNameColumn.ColumnName = "Fname";  
  37.     fNameColumn.DefaultValue = "Fname";  
  38.     namesTable.Columns.Add(fNameColumn);  
  39.   
  40.     DataColumn lNameColumn = new DataColumn();  
  41.     lNameColumn.DataType = System.Type.GetType("System.String");  
  42.     lNameColumn.ColumnName = "LName";  
  43.     namesTable.Columns.Add(lNameColumn);  
  44.   
  45.     // Create an array for DataColumn objects.  
  46.     DataColumn [] keys = new DataColumn [1];  
  47.     keys[0] = idColumn;  
  48.     namesTable.PrimaryKey = keys;  
  49.   
  50.     // Return the new DataTable.  
  51.     return namesTable;  
  52. }  
### C#DataRow使用及其示例 DataRow 是 ADO.NET 数据模型的一部分,用于表示 DataTable 中的一行数据。通过 DataRow 可以访问、修改和操作表中的每一行记录。以下是关于 DataRow 使用的一些常见场景和代码示例。 #### 创建并填充 DataTable 和 DataRow 可以创建一个 DataTable 并向其中添加列和行。下面是一个简单的例子: ```csharp // 初始化一个新的 DataTable 对象 DataTable dataTable = new DataTable(); // 添加列到 DataTable dataTable.Columns.Add("ID", typeof(int)); dataTable.Columns.Add("Name", typeof(string)); // 创建新的 DataRow 实例并通过 Add 方法将其添加到 DataTable DataRow newRow = dataTable.NewRow(); newRow["ID"] = 1; newRow["Name"] = "John Doe"; dataTable.Rows.Add(newRow); // 输出表格的内容 foreach (DataRow row in dataTable.Rows) { Console.WriteLine($"ID: {row["ID"]}, Name: {row["Name"]}"); } ``` 此代码展示了如何定义一列名为 `ID` 的整数型字段以及另一列为字符串型的 `Name` 字段[^1]。接着实例化了一个新行,并赋值给这些字段后再加入到父级的 `DataTable` 表格对象之中。 #### 修改现有 DataRow 值 如果需要更新已存在的 DataRow 记录,则可以通过索引来定位该条目再更改对应的属性值如下所示: ```csharp if(dataTable.Rows.Count > 0){ // 获取第一个 DataRow DataRow firstRow = dataTable.Rows[0]; // 更新指定列的数据 firstRow["Name"] = "Jane Smith"; foreach(DataColumn column in dataTable.Columns){ Console.Write($"{column.ColumnName}: "); Console.WriteLine(firstRow[column]); } } ``` 这里演示了当存在至少一条记录时找到首项并将名字更改为其他内容的过程[^2]。最后遍历所有可用列打印当前状态下的每项详情。 #### 删除特定条件匹配的 Rows 假设我们想删除那些姓名不以字母 J 开头的人的信息列表项目可采用似这样的方式实现过滤功能之后执行移除动作 : ```csharp dataView.RowFilter = "Name NOT LIKE 'J%'"; foreach(var removedItem in dataView.ToTable().AsEnumerable()){ dataTable.Rows.Remove(removedItem); } Console.WriteLine("Filtered Items Removed Successfully!"); ``` 上述片段利用 DataView 设置筛选器排除掉不符合要求的结果集进而逐一剔除满足标准之外的所有成员[^3]. #### 多线程环境注意事项 由于某些集合可能不具备天然支持并发访问的能力所以在涉及多线程序列化读写操作的时候务必要查阅官方文档确认目标组件是否具备相应保障机制或者考虑运用同步锁等方式加以保护以免引发竞态错误等问题发生.[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值