在DataGridView中对数据进行修改,并更新到sql数据库

实现思路:
在DataGridView中对数据进行修改,先弹出修改界面,显示修改之前的信息,然后在修改页面上,进行修改并更新到数据库中

**

一、点击“修改”,弹出修改界面并在界面上显示所选中行的信息

**

  • 在页面中点击“修改”,弹出修改页面,并且自动在修改页面中显示出需要修改的行的信息在这里插入图片描述
  • 实现过程:
    1.点击“修改”,获取鼠标选中的学生号,并把该值传入新窗体(信息修改界面),新窗体根据 StuId学生号,读取数据库加载相关信息。
    注意:把修改界面设置为当前“学生列表”的父窗体使页面显示在主界面内
    frmEditStudent.Tag是界面的数据对象,object类型
//1 获取我当前点击的单元格的行列数索引
//2 判断是否选择的是link列,并且判断是 删除还是修改
DataRow dr = (dgvStudents.Rows[e.RowIndex].DataBoundItem as DataRowView).Row;
DataGridViewCell cell = dgvStudents.Rows[e.RowIndex].Cells[e.ColumnIndex];
if (cell is DataGridViewLinkCell && cell.FormattedValue.ToString() == "修改")
{
    //修改操作,打开修改页面,并把stuId传过去
    //传值法:tag属性
    int stuId = (int)dr["StuId"];
    FrmEditStudent frmEditStudent = new FrmEditStudent();
    frmEditStudent.Tag = stuId;//这里用的是tag属性传值
    frmEditStudent.MdiParent = this.MdiParent;//指定修改页面的父容器
    frmEditStudent.Show();//显示在MDI窗体内
}

在新窗体界面,窗体加载函数中;

 private void FrmEditStudent_Load(object sender, EventArgs e)
 {
     MessageBox.Show("您要修改的信息的学生学号为"+ "\n" + this.Tag.ToString(), "温馨提示");
     InitClasses();//加载班级列表
     InitStuInfo();//加载学生信息
 }

点击的第一行数据的学号为1002,则1002即传入的tag属性值,调试用。
在这里插入图片描述
在这里插入图片描述
首先,加载班级列表;班级表和年级表如下:
查询语句
select ClassId,ClassName,GradeName from ClassInfo c,GradeInfo g where c.GradeId = g.GradeId在这里插入图片描述
查询结果:
在这里插入图片描述
思路:通过sql语句建立查询,把数据库中的数据读取出来,并存为DataTable类型,然后把信息给combox指定数据源,并显示

//--------------加载班级列表-----------------------------------
private void InitClasses()
{
    //获取数据 联合查询
    string sql = "select ClassId,ClassName,GradeName from ClassInfo c,GradeInfo g where c.GradeId = g.GradeId";
    DataTable dtClasses = SqlHelper.GetDataTable(sql);//把数据库中的数据读出来,存为DataTable类型
    //组合班级列表显示项 遍历过程
    if (dtClasses.Rows.Count > 0)
    {
        foreach (DataRow dr in dtClasses.Rows)
        {
            string className = dr["ClassName"].ToString();
            string gradeName = dr["GradeName"].ToString();
            dr["ClassName"] = className + "  " + gradeName;
        }
    }
    //指定数据源 并显示
    cboClasses.DataSource = dtClasses;
    cboClasses.DisplayMember = "ClassName";
    cboClasses.ValueMember = "ClassId";
}

加载学生信息:
如果传入的tag属性(即学号不为空)则将传过来的学号转化为int型,
然后从学生表中建立查询,逐条读取数据并显示,注意这里的ExecuteReader用法
ExecuteReader 尽可能快地对数据库进行查询并得到结果。返回一个SqlDataReader对象
参数CommandBehavior.CloseConnection:返回对象前不关闭数据库连接

参考博客:https://www.cnblogs.com/st2012/archive/2012/04/06/2435406.html

//---------------------加载学生信息------------------------
private void InitStuInfo()
{
    if (this.Tag != null && this.Tag.ToString()!="")
    {
        int.TryParse(this.Tag.ToString(), out stuId);
    }
    //查询数据
    string sql = "select StuName,Sex,ClassId,Phone from StudentInfo where StuId=@StuId";
    SqlParameter paraId = new SqlParameter("@StuId",stuId);
    SqlDataReader dr = SqlHelper.ExecuteReader(sql,paraId);
    //读取数据 数据读取流只能向前不能后退,读一条丢一条
    if (dr.Read())
    {
        txtStuName.Text = dr["StuName"].ToString();
        txtPhone.Text = dr["Phone"].ToString();
        string sex = dr["Sex"].ToString();
        int classId = (int)dr["ClassId"];
        if (sex == "男")
        {
            rbtMale.Checked = true;
        }
        else
        {
            rbtFemale.Checked = true;
        }
        cboClasses.SelectedValue = classId;
    }
    dr.Close();
}
/// <summary>
/// 执行查询,返回 SqlDataReader 数据库读取的行数据流zyh
/// </summary>
/// <param name="sql"></param>
/// <param name="paras"></param>
/// <returns></returns>
public static SqlDataReader ExecuteReader(string sql,params SqlParameter[] paras)
{
    //打开数据库
    SqlConnection conn = new SqlConnection(connString);
    try
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.Parameters.Clear();
        cmd.Parameters.AddRange(paras);
        SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        return dr;
    }
    catch (SqlException ex)
    {
        conn.Close();
        throw new Exception("执行查询出现异常",ex);
    }           
}

下一步是点击“修改”按钮,把修改后的数据更新到数据库

  • 4
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
要给按条件输出的DataGridView控件进行数据修改并提交至数据库,可以按照以下步骤进行操作: 1. 获取选的行数据,可以通过遍历DataGridView.SelectedRows属性获取选的行数据。 2. 将选的行数据填充到相应的控件,例如TextBox、ComboBox等控件。 3. 用户修改数据后,点击保存按钮,将修改后的数据更新数据库。可以使用ADO.NETSqlCommand对象执行UPDATE语句更新数据。 以下是示例代码: ``` private void btnSave_Click(object sender, EventArgs e) { // 获取选的行数据 foreach (DataGridViewRow row in dataGridView1.SelectedRows) { // 获取行数据的主键值 int id = (int)row.Cells["ID"].Value; // 将选的行数据填充到相应的控件 txtName.Text = row.Cells["Name"].Value.ToString(); cmbGender.Text = row.Cells["Gender"].Value.ToString(); dtpBirthday.Value = (DateTime)row.Cells["Birthday"].Value; // 用户修改数据后,更新数据库数据 using (SqlConnection conn = new SqlConnection("连接字符串")) { conn.Open(); string sql = "UPDATE 表名 SET Name=@Name, Gender=@Gender, Birthday=@Birthday WHERE ID=@ID"; SqlCommand cmd = new SqlCommand(sql, conn); cmd.Parameters.AddWithValue("@Name", txtName.Text); cmd.Parameters.AddWithValue("@Gender", cmbGender.Text); cmd.Parameters.AddWithValue("@Birthday", dtpBirthday.Value); cmd.Parameters.AddWithValue("@ID", id); cmd.ExecuteNonQuery(); } } } ``` 需要注意的是,以上代码仅适用于单个主键的情况。如果表有复合主键,需要将主键值作为参数传递给UPDATE语句。另外,需要根据实际情况修改连接字符串、表名和列名等信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积跬步、至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值