zoukankan      html  css  js  c++  java
  • ADO.NET编程(3)在内存中对DataTable进行增/删/改操作

      我们可以在内存中创建DataTable对象,同样也可以对它们进行进一步的各种操作,下面的示例程序中,让我们来学习如何对它们进行基本的增删改的操作。作为示例程序的第一步我们应该是先创建一个Windows Forms的项目,然后定义一个存储和传递数据的类。

    1.定义一个Employee类

      在Employee类中定义基本的成员属性,构造函数和获取对象集合的静态方法。如下:

    View Code
     1       /// <summary>
     2       /// 员工类
     3       /// </summary>
     4       public class Employee
     5       {
     6           /// <summary>
     7           /// 员工ID
     8           /// </summary>
     9           public Int64 ID { get; set; }
    10   
    11           /// <summary>
    12           /// 全名
    13           /// </summary>
    14           public string FullName { get; set; }
    15   
    16           /// <summary>
    17           /// 手机号
    18           /// </summary>
    19           public string PhoneNumber { get; set; }
    20   
    21           /// <summary>
    22           /// Email
    23           /// </summary>
    24           public string Email { get; set; }
    25   
    26           /// <summary>
    27           /// 无参构造函数
    28           /// </summary>
    29           public Employee() { }
    30   
    31           /// <summary>
    32           /// 有参构造函数
    33           /// </summary>
    34           /// <param name="id"></param>
    35           /// <param name="fullName"></param>
    36           /// <param name="phoneNumber"></param>
    37           /// <param name="email"></param>
    38           public Employee(Int64 id, string fullName, string phoneNumber, string email)
    39           {
    40               this.ID = id;
    41               this.FullName = fullName;
    42               this.PhoneNumber = phoneNumber;
    43               this.Email = email;
    44           }
    45   
    46           /// <summary>
    47           /// 获取员工对象集合
    48           /// </summary>
    49           /// <returns></returns>
    50           public static List<Employee> GetEmployeeList()
    51           {
    52               return new List<Employee>
    53               {
    54                   new Employee(id:1,fullName:"小强",phoneNumber:"18656678765",email:"xiaoqiang@126.com"),
    55                   new Employee(id:2,fullName:"如花",phoneNumber:"15156678765",email:"ruhua@126.com"),
    56                   new Employee(id:3,fullName:"玉面小飞龙",phoneNumber:"13856787665",email:"feilong@126.com"),
    57                   new Employee(id:4,fullName:"旺财",phoneNumber:"13497747665",email:"wancai@126.com"),
    58                   new Employee(id:5,fullName:"来福",phoneNumber:"13908778765",email:"laifu@126.com")
    59                };
    60           }
    61       } 

    2.创建EmployeeManager.cs的窗体

      界面设计很简单,一个DataGridView控件和两个Button控件,如下:

    3.创建EmployeeDetail.cs窗体

      这个窗体是用来添加、修改DataTable数据的,对应Employee类几个属性的文本框和确定、取消按钮,设计如下:

    整个示例就只有这两个简单的窗体,关键代码在后面给出。

    4.在内存中创建和Employee类对应的DataTable并添加数据

    View Code
     1          /// <summary>
     2          /// 获取Employee表
     3          /// </summary>
     4          /// <returns></returns>
     5          public DataTable GetEmployeeTable()
     6          {
     7              //定义表名称
     8              DataTable empDt = new DataTable("Employee");
     9  
    10              //增加列
    11              empDt.Columns.Add("ID", typeof(Int64));
    12              empDt.Columns.Add("FullName", typeof(string));
    13              empDt.Columns.Add("PhoneNumber", typeof(string));
    14              empDt.Columns.Add("Email", typeof(string));
    15  
    16              //定义主键
    17              empDt.PrimaryKey = new DataColumn[] { empDt.Columns["ID"] };
    18  
    19              //增加行数据
    20              foreach (Employee oneEmp in Employee.GetEmployeeList())
    21              {
    22                  //获取一个符合Employee表架构的Row对象
    23                  //DataRow oneData = empDt.NewRow();
    24  
    25                  //oneData["ID"] = oneEmp.ID;
    26                  //oneData["FullName"] = oneEmp.FullName;
    27                  //oneData["PhoneNumber"] = oneEmp.PhoneNumber;
    28                  //oneData["Email"] = oneEmp.Email;
    29                  //empDt.Rows.Add(oneData);
    30                  empDt.Rows.Add(new object[] { oneEmp.ID, oneEmp.FullName, oneEmp.PhoneNumber, oneEmp.Email });
    31              }
    32              return empDt;
    33          } 

    5.双击DataGridView任意行时,编辑行数据

    View Code
     1          /// <summary>
     2          /// 双击任意单元格发生
     3          /// </summary>
     4          /// <param name="sender"></param>
     5          /// <param name="e"></param>
     6          private void Employee_DataGrid_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
     7          {
     8              if (e.RowIndex == -1) return;
     9              this.btn_delete.Enabled = true;
    10  
    11              Employee oneEmployee = new Employee();
    12  
    13              int currentIndex = Employee_DataGrid.CurrentCell.RowIndex;
    14              oneEmployee.ID = (Int64)(this.Employee_DataGrid.Rows[currentIndex].Cells[0].Value);
    15              oneEmployee.FullName = this.Employee_DataGrid.Rows[currentIndex].Cells[1].Value.ToString();
    16              oneEmployee.PhoneNumber = this.Employee_DataGrid.Rows[currentIndex].Cells[2].Value.ToString();
    17              oneEmployee.Email = this.Employee_DataGrid.Rows[currentIndex].Cells[3].Value.ToString();
    18  
    19              //DataRow editRow = (this.Employee_DataGrid.Rows[currentIndex].DataBoundItem as DataRowView).Row;
    20              DataRow editRow = (this.Employee_DataGrid.CurrentRow.DataBoundItem as DataRowView).Row;
    21  
    22              EmployeeDetail detail = new EmployeeDetail(this.EmployeeTable, oneEmployee, editRow, TableAction.Edit);
    23  
    24              if (detail.ShowDialog() == DialogResult.OK)
    25              {
    26                  //DataRow oneRow = detail.EmployeeEntry;
    27                  //删除成功
    28                  MessageBox.Show("修改成功!");
    29              }
    30          }

    6.添加删除数据行的代码

     1         /// <summary>
     2         /// 删除数据行
     3         /// </summary>
     4         /// <param name="sender"></param>
     5         /// <param name="e"></param>
     6         private void btn_delete_Click(object sender, EventArgs e)
     7         {
     8             if (Employee_DataGrid.Rows.Count > 0)
     9             {
    10                 int currentIndex = Employee_DataGrid.CurrentCell.RowIndex;
    11 
    12                 DataRow editRow = (this.Employee_DataGrid.CurrentRow.DataBoundItem as DataRowView).Row;
    13                 // DataRow editRow = (this.Employee_DataGrid.Rows[currentIndex].DataBoundItem as DataRowView).Row;
    14                 if (editRow != null)
    15                 {
    16                     editRow.Delete();
    17                     this.EmployeeTable.AcceptChanges();
    18                 }
    19             }
    20         }

    7.添加增加数据行的代码

     1         /// <summary>
     2         /// 增加数据行
     3         /// </summary>
     4         /// <param name="sender"></param>
     5         /// <param name="e"></param>
     6         private void btn_Add_Click(object sender, EventArgs e)
     7         {
     8             EmployeeDetail detail = new EmployeeDetail(this.EmployeeTable, TableAction.Add);
     9             if (detail.ShowDialog() == DialogResult.OK)
    10             {
    11                 DataRow oneRow = detail.EmployeeEntry;
    12                 try
    13                 {
    14                     this.EmployeeTable.Rows.Add(oneRow);
    15                     this.EmployeeTable.AcceptChanges();
    16                 }
    17                 catch (Exception ex)
    18                 {
    19                     MessageBox.Show("错误:" + ex.Message);
    20                 }
    21             }
    22         }

    最后我们运行示例程序:

    增加数据:

    编辑数据:

    删除数据:

    猛击下载:示例源码

    作者:晴天猪

    出处:http://www.cnblogs.com/IPrograming 

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    C#ActiveX控件开发学习
    SPFA最短路算法
    用宏实现C/C++从非零整数开始的数组
    mysql学习笔记
    python学习笔记(多进程并发)
    python学习笔记(socket模块)
    jQuery学习笔记
    python学习笔记(IO模型)
    Django学习笔记
    导入Excel时启动Excel.exe进程出错
  • 原文地址:https://www.cnblogs.com/IPrograming/p/ADO_NET_3.html
Copyright © 2011-2022 走看看