C#中的DataTable怎么获取已删除行的信息

C#的DataTable的行有几种状态:

Added:表示行已添加到DataRowCollection,尚未调用DataTable.AcceptChange()
Modified:表示行已被修改,尚未调用DataTable.AcceptChange()
Deleted:表示行已被删除,
Unchanged:自上次调用AcceptChange()之后没有更改的行.
Detached:行虽然创建,但没有放到DataRowCollection中.
 
有时候,要获取到客户端表格的删除行,然后再提交到数据库更新.但是如果直接这样访问:
DataTable dtDeleted = dt.GetChanges(DataRowState.Deleted);
string id=dtDeleted.Rows[0]["id"].ToString();
会出现DeletedRowInaccessibleException异常:不能通过已删除的行访问该行的信息.
 
怎么办呢?其实可以Rows的另一个重载索引器来访问:
string id=dtDeleted.Rows[0]["id",DataRowVersion.Original].ToString();
 
DataRowVersion.Original表示的是该行的原始值
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,对于学生信息管理系统的编写,一般需要涉及以下几个方面: 1. 数据库设计:需要设计学生信息的数据表,包括学号、姓名、性别、年龄、联系方式等字段。 2. 界面设计:需要设计一个用户友好的界面,让用户可以方便地进学生信息的添加、修改、删除和查询等操作。 3. 功能实现:需要编写程序逻辑,实现学生信息的增删改查等功能。 具体实现的步骤如下: 1. 创建一个数据库,包含一个名为“student”的表,表包含字段“id”(学号)、“name”(姓名)、“gender”(性别)、“age”(年龄)和“contact”(联系方式)。 2. 创建一个 C# 窗体应用程序,包含一个主界面和多个子界面,用于实现学生信息的增删改查等功能。 3. 在主界面添加按钮或菜单项,用于打开子界面或执相应的操作。 4. 在子界面添加文本框、按钮等控件,用于实现学生信息的添加、修改、删除和查询等操作。在每个子界面都需要添加一个“保存”按钮,用于将修改后的信息保存到数据库。 5. 在程序编写相应的代码,实现学生信息的增删改查等功能。具体代码实现可以参考以下示例: ``` //连接数据库 SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=student;Integrated Security=True"); //添加学生信息 private void btnAdd_Click(object sender, EventArgs e) { //获取用户输入的学生信息 string id = txtId.Text; string name = txtName.Text; string gender = txtGender.Text; string age = txtAge.Text; string contact = txtContact.Text; //将学生信息插入到数据库 string sql = "INSERT INTO student(id, name, gender, age, contact) VALUES('" + id + "', '" + name + "', '" + gender + "', '" + age + "', '" + contact + "')"; SqlCommand cmd = new SqlCommand(sql, conn); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); //清空文本框 txtId.Text = ""; txtName.Text = ""; txtGender.Text = ""; txtAge.Text = ""; txtContact.Text = ""; MessageBox.Show("添加成功!"); } //修改学生信息 private void btnUpdate_Click(object sender, EventArgs e) { //获取用户选择的学生信息 string id = dataGridView1.SelectedRows[0].Cells[0].Value.ToString(); string name = dataGridView1.SelectedRows[0].Cells[1].Value.ToString(); string gender = dataGridView1.SelectedRows[0].Cells[2].Value.ToString(); string age = dataGridView1.SelectedRows[0].Cells[3].Value.ToString(); string contact = dataGridView1.SelectedRows[0].Cells[4].Value.ToString(); //打开修改界面,并将学生信息显示在文本框 UpdateForm updateForm = new UpdateForm(id, name, gender, age, contact); updateForm.ShowDialog(); //更新学生信息 id = updateForm.txtId.Text; name = updateForm.txtName.Text; gender = updateForm.txtGender.Text; age = updateForm.txtAge.Text; contact = updateForm.txtContact.Text; string sql = "UPDATE student SET name='" + name + "', gender='" + gender + "', age='" + age + "', contact='" + contact + "' WHERE id='" + id + "'"; SqlCommand cmd = new SqlCommand(sql, conn); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); MessageBox.Show("修改成功!"); } //删除学生信息 private void btnDelete_Click(object sender, EventArgs e) { //获取用户选择的学生信息 string id = dataGridView1.SelectedRows[0].Cells[0].Value.ToString(); //从数据库删除该学生信息 string sql = "DELETE FROM student WHERE id='" + id + "'"; SqlCommand cmd = new SqlCommand(sql, conn); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); MessageBox.Show("删除成功!"); } //查询学生信息 private void btnSearch_Click(object sender, EventArgs e) { //获取用户输入的查询条件 string condition = txtCondition.Text; //在数据库查询符合条件的学生信息 string sql = "SELECT * FROM student WHERE id LIKE '%" + condition + "%' OR name LIKE '%" + condition + "%' OR gender LIKE '%" + condition + "%' OR age LIKE '%" + condition + "%' OR contact LIKE '%" + condition + "%'"; SqlDataAdapter adapter = new SqlDataAdapter(sql, conn); DataTable dt = new DataTable(); adapter.Fill(dt); //将查询结果显示在界面上 dataGridView1.DataSource = dt; } ``` 以上代码仅供参考,实际实现还需要考虑异常处理、数据验证等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值