zoukankan      html  css  js  c++  java
  • DataGridView更新数据到数据库

      WinFrom程序绑定了一个DataGridView控件,我需要添加一个button按钮来更改状态,还需要把更新之后的状态更新到数据库,如下图所示的这样:

      首先先来拖控件,把界面做出来,自己拖一个DataGridView,出来,然后设置列宽,你可以去属性那里去设置,也可以写代码来控制,代码如下

    this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;

      然后呢,再来给DataGridView加button。点击右上角的小三角,有一个添加列:

      选择button之后,改名称什么的自己看吧,有了button之后,只需要在界面上双击button就可以进入button事件了,在编辑列里面可以改一些button的属性,如图:

    一、把数据显示在DataGridView上

    我用的是datatable的方式:

     public DataTable DbConnection(string sql,DataTable dt)
            {
                using (SqlConnection con = new SqlConnection(connstr))
                {
                    if (con.State == ConnectionState.Closed)
                    {
                        con.Open();
                    }
                    SqlCommand cmd = new SqlCommand(sql, con);
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    da.Fill(dt);
                }
                return dt;
            }
    dataGridView1.DataSource = DbConnection(sql,dt);

      有时候你添加了之后表格并不会显示,这是因为你没有绑定,再加一行代码就行了

    dataGridView1.DataSource = DbConnection(sql,dt);

    二、把更改后的数据从DataGridView上同步到数据库

      这里呢,有几种情况。例如SqlCommandBuilder 或者 直接写SQL语句也行,下面就介绍一下这两种方法吧

       第一种方法:SqlCommandBuilder 

      private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
                if (e.RowIndex >= 0)
                {
                    DataGridViewColumn column = dataGridView1.Columns[e.ColumnIndex];
                    if (column is DataGridViewButtonColumn)
                    {
                        //在这里写你的操作,上面的是判断你点击的是哪一个button按钮 
                    }
                }
            }

    如果要修改当前行的数据可以这样:

    dataGridView1["PlaceDescribe", e.RowIndex].Value = "已禁用";  //PlaceDescribe是数据库里面的列名

    SqlCommandBuilder :不建议使用,因为我用的时候数据更新有bug,准确率不高,我不知道原因。反正不推荐使用。

    using (SqlConnection con = new SqlConnection(connstr))
    {
                    if (con.State == ConnectionState.Closed)
                    {
                        con.Open();
                    }
                    SqlCommand cmd = new SqlCommand(sql, con);
                    da = new SqlDataAdapter(cmd);
                    SqlCommandBuilder scb = new SqlCommandBuilder(da);
                    try
                    {   //强烈建议把这里写入trycatch语句
                        da.Update(db.DbConnection(sql,dt));
                        MessageBox.Show("保存成功");
                    }
                    catch (Exception)
                    {
                         throw;
                    }
    }                         

    剩下的这个就是直接写sql语句了,这个很简单

        setSql = "update RtdbTransPlace set PlaceState=1,PlaceDescribe='已启用' where Tag= '" + dataGridView1["Tag", e.RowIndex].Value + "'";
    
                        using (SqlConnection con = new SqlConnection(connstr))
                        {
                            if (con.State == ConnectionState.Closed)
                            {
                                con.Open();
                            }
                            SqlCommand cmd = new SqlCommand(setSql, con);
    
    
                            try
                            {
                                int count = cmd.ExecuteNonQuery();
                                MessageBox.Show("保存成功");
                            }
                            catch (Exception)
                            {
                                throw;
                            }
                        }

    关于表格线的问题,可以修改DataGridView的属性:

  • 相关阅读:
    Leetcode 493.翻转对
    Leetcode 491.递增子序列
    Leetcode 488.祖玛游戏
    Leetcode 486.预测赢家
    Leetcode 483.最小好进制
    Leetcode 482.密钥格式化
    商品期货投资的那些事(八)为你的套利头寸买个保险
    商品期货投资的那些事(七)趋势套利震荡投机、直道飘移弯道超越
    商品期货投资的那些事(五)做空焦煤焦炭?你是想跟发改委作对吗?
    商品期货投资的那些事(六)期现投资这行怎样才能赚大钱?
  • 原文地址:https://www.cnblogs.com/yunquan/p/7754654.html
Copyright © 2011-2022 走看看