DataGridView新增数据,修改数据,删除数据

打开Vs ,创建一个DataGridViwe控件和contextMenuStrip右键快捷列表即可。

关于Insert新增一行数据 和 Update更新数据。

执行完添加数据库操作后,把公共变量i重新赋值,保存新增后的总行

        private void Newinsert()
        {

            string strda = "select * from FilTer";
            string strin = "insert FilTer(id) values('" + dataGridView1.CurrentCell.Value.ToString() + "') ";

            SqlConnection conn = connection();
            conn.Open();

            DataSet ds = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter(strda, conn);
            da.InsertCommand = new SqlCommand(strin, conn);
            da.Fill(ds, "数据表");

            DataRow dr = ds.Tables[0].NewRow();
            dr[0] = strin;
            ds.Tables[0].Rows.Add(dr);

            da.Update(ds, ds.Tables[0].ToString());
            conn.Close();
            i = dataGridView1.Rows.Count;//保存添加后数据库已有的行数。重点


        } //insert

上段代码只是新增一行数据的一部分,然而我们不仅要新增还需要更新或者修改部分数据。
下段代码以两种不同情况下刷新出来的行数,判断是新增或者修改。
一种情况:是新增后的行数。
另一个情况:是未新增的行数。

        private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {//单元格的值更改时发生

            SqlConnection conn = connection();
            try
            {//怎么判断表格是否新建了一行?有一个属性是否添加新行

                if (dataGridView1.Rows.Count > i || dataGridView1.Rows.Count == 0)//新增。重点
                {
                    Newinsert();
                }
                else//更新。重点
                {
                    conn.Open();
                    string strcolumn1 = dataGridView1.Columns[e.ColumnIndex].HeaderText;//得到列标题
                    string strvalue1 = dataGridView1.CurrentCell.Value.ToString();//得到数据
                    string strid = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();//所选行第一列的数据
                    string strinsert = "update FilTer set " + strcolumn1 + " = '" + strvalue1 + "' where id = '" + strid + "'";
                    //更新数据可以使用此代码。前提条件是必须符合更新条件
                    SqlCommand comm = new SqlCommand(strinsert, conn);
                    comm.ExecuteNonQuery();
                }
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message);
            }
            finally
            {
                conn.Close();
            }
        }//单元格的值更改时发生(update&&insert)

下段代码是初始化数据

        int i = 0;//保存第一次显示的行数,公共变量
        private void GetDataGridView()
        {
            string strselect = "select * from FilTer";
            SqlConnection conn = connection();
            DataSet ds = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter(strselect, conn);
            da.Fill(ds, "显示数据");
            dataGridView1.DataSource = ds.Tables[0];
            dataGridView1.AutoGenerateColumns = true;//自动创建列
            dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;//单击单元格
            i = dataGridView1.Rows.Count;//保存数据库已有的行数
        }//datagridview初始化

关于Delete删除一行数据。

相对新增和更改,删除代码更简单了。删除主要关键代码:

 dataGridView1.Rows.RemoveAt(index);

则删除数据库主要关键代码:

        string strRow = dataGridView1.CurrentCell.Value.ToString();
        string strdelete = "delete FilTer Where id = '" + strRow + "'";
        conn.Open();
        SqlCommand comm = new SqlCommand(strdelete, conn);
        comm.ExecuteNonQuery();

下段是contextMenuStrip右键快捷列表代码的执行过程,也可以用button,下拉列表其他控件。根据现实需要去设置就好。

        int index = 0;//删除使用
        private void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Right)
            {
                dataGridView1.Rows[e.RowIndex].Selected = true;//选定一行
                dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells[0];//每次只选定一行
                contextMenuStrip1.Show(dataGridView1, e.Location);//右键列表显示在datagridview控件上
                contextMenuStrip1.Show(Cursor.Position);//右键快捷列表显示在鼠标停留位置
                index = e.RowIndex;
            }
        }//表格右键触发(delete)

        private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SqlConnection conn = connection();
            try
            {
                string strRow = dataGridView1.CurrentCell.Value.ToString();
                string strdelete = "delete FilTer Where id = '" + strRow + "'";
                conn.Open();
                SqlCommand comm = new SqlCommand(strdelete, conn);
                comm.ExecuteNonQuery();

                dataGridView1.Rows.RemoveAt(index);
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message.ToString());
            }
            finally
            {
                conn.Close();
            }
        }//右键删除 

下图是以上代码实现,关于筛选和背景色设置不包含在上面代码中。
这里写图片描述

数据库设置只有id是不为空,没检索,没唯一其他设置。只是为了研究直接在表格添加数据的功能实现。

  • 13
    点赞
  • 50
    收藏
  • 打赏
    打赏
  • 1
    评论
1. 基类说明 1.1 基类结构图 1.2 基类说明 1.2.1 BaseEditClass BaseEditClass是所有单表编辑功能的基类。BaseEditClass从NSGForm继承,以处理统一的界面和字体风格。 BaseEditClass抽象出了编辑类功能通用的方法并定义为基类方法,以便子类继承,并增加自己的代码。  自定义属性 名称 说明 DataTable 功能所编辑的数据表 DataState 功能所处的状态:浏览(dsBrowse)、新增(dsInsert)、编辑(dsEdit) BatchSave 是否批量提交数据表,默认为False DeleteWarn 在删除记录时是否提示,默认为True  自定义方法 名称 说明 FormInit 在FormLoad时被调用,具体功能中可重载该方法添加自定义的初始化代码 PostData 具体功能中需要重载该方法,并调用具体的TableAdapter.Update(row),以保存数据数据库。 RefreshData 统一的刷新数据表过程,具体功能中需要重载该方法,并调用具体的TableAdapter.Fill(DataTable),以查询数据 DataValid 统一的数据验证方法,在保存数据前被调用。具体功能中可重载该方法添加自定义的数据校验代码 NewRecord 在新增数据时被调用,在具体过程中可重载该方法添加自定义的新增记录默认值 SaveData 保存数据的方法,具体功能中调用该过程保存数据 DeleteData 删除数据的方法,具体功能中调用该过程删除数据 CancelData 取消数据修改的方法,具体功能中调用该过程取消数据修改 1.2.2 BaseGridEdit BaseGridEdit是所有直接使用DataGridView进行编辑的功能的基类。BaseGridEdit从BaseEditClass继承。 自定义属性 名称 说明 Grid 编辑所用的DataGridView 自定义方法 名称 说明 RecordValid 统一的数据验证方法,在单条保存数据前被调用。具体功能中可重载该方法添加自定义的数据校验代码 1.2.3 BaseGridEditForm BaseGridEditForm是所有直接使用DataGridView进行编辑的功能的模板。所有直接使用DataGridView进行编辑的功能都需要从该模板拷贝后进行修改。 2. 模板使用方法 2.1 BaseGridEditForm 使用BaseGridEditForm需要按以下四步操作就可以得到需要的功能。 一、 先从BaseGridEditForm拷贝文件到工程后修改类名、命名空间 二、 在项目的数据集中增加TableAdapter,以查询需要维护的指定的数据表 三、 将DataGridView绑定到新增数据表 四、 修改以下基类方法 名称 说明 构造方法 增加”DataTable属性=新增数据表”的代码 FormInit 增加需要的Form初始化代码,如RefreshData以获得数据 PostData 增加一行代码:新增的TableAdapter.Update(row) RefreshData 增加使用新增TableAdapter.Fill(DataTable)的代码,以获得查询数据。注意:代码需要写在IsRefreshData = true;和 IsRefreshData = false;语句的中间 RecordValid 增加自定义的数据校验语句。 NewRecord 增加自定义的新增数据默认值代码。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

秋风十里

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值