DataSet数据集,数据缓存在客户端内存中,支持断开式连接.DataGridView控件绑定DataSet时,它自动的改变的DS的行的状态,而且在做增删改查的时候,可以借助SqlCommandBuilder类来完成.

  SqlCommandBuilder必须执行SELECT命令来检索元数据,所以它要求多往返服务器一次,从而增加了应用程序的开销,而且操作的表必须要有主键约束。优点是自动建立insertcommand等命令
1,添加操作
  private void button2_Click(object sender, EventArgs e)
        {
            using (SqlConnection con = new SqlConnection(connstring))
            {
                con.Open();
                dapt = new SqlDataAdapter("select stucode,spcode,ctcode,stunits from stunits", con);
                SqlCommandBuilder sdb = new SqlCommandBuilder(dapt);
                DataSet ds1 = ds.GetChanges();
                if (ds.HasChanges())
                {
                    try
                    {
                        dapt.Update(ds, "stunit");
                        MessageBox.Show("保存成功", "提示");
                    }
                    catch (SqlException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
               
            }
            this.dataGridView1.AllowUserToAddRows =false;
        }
2)删除操作(选中整行)
   private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            using (SqlConnection con = new SqlConnection(connstring))
            {
                //con.Open();
                StringBuilder sb  =new StringBuilder();
                sb.Append("delete stunits where stucode='"+this.dataGridView1.SelectedCells[0].Value.ToString()+"'");
                SqlCommand cmd = new SqlCommand(sb.ToString(), con);
                dapt.DeleteCommand = cmd;
                int rowindex = this.dataGridView1.CurrentCell.RowIndex;
                ds.Tables["stunit"].Rows[rowindex].Delete();//修改行的状态
               // string celltext = this.dataGridView1.SelectedCells[rowindex].Value.ToString();
               // MessageBox.Show(celltext);
                if(ds.HasChanges(DataRowState.Deleted))
                {
                     try
                    {
                        dapt.Update(ds, "stunit");
                        MessageBox.Show("删除成功", "提示");
                    }
                    catch (SqlException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }
        }
2)删除操作(单击第一个单无格删除)
    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 0 && e.RowIndex >= 0)
            {
                using (conn = new SqlConnection(con))
                {
                    conn.Open();
                    StringBuilder sb = new StringBuilder();
                    sb.Append("delete zy_bbxmxx where 代码='" + this.dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString()+"'");
                    //MessageBox.Show(sb.ToString());
                    dapt.DeleteCommand = new SqlCommand(sb.ToString(), conn);
                    DialogResult answer = MessageBox.Show("是否删除", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);
                    if (answer == DialogResult.Yes)
                    {
                        try
                        {
                            ds.Tables[0].Rows[e.RowIndex].Delete();//改变行的状态
                            dapt.Update(ds, "zy_bbxx");
                            MessageBox.Show("删除成功");
                        }
                        catch (SqlException ex)
                        {
                            
                            MessageBox.Show(ex.Message);
                        }
                       
                    }
                }
            }
        } 
        
3)修改操作
 private void 修改ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            using (SqlConnection con = new SqlConnection(connstring))
            {
                con.Open();
                //DataSet ds1 = ds.GetChanges();
                dapt = new SqlDataAdapter("select stucode,spcode,ctcode,stunits from stunits", con);
                SqlCommandBuilder sdb = new SqlCommandBuilder(dapt);
                if (ds.HasChanges())
                {
                    try
                    {
                        dapt.Update(ds, "stunit");
                        MessageBox.Show("修改成功","提示");
                    }
                    catch (SqlException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }
或者
 private void btnEdit_Click(object sender, EventArgs e)
        {
            using (SqlConnection conn=new SqlConnection(con))
            {
                DataSet ds1 = ds.GetChanges();//得到修改后的DataSet
                if (ds1 != null)
                {
                    try
                    {
                        dapt = new SqlDataAdapter("select * from zy_bbxmxx", conn);
                        SqlCommandBuilder sb = new SqlCommandBuilder(dapt);        
                        dapt.Update(ds,"zy_bbxx");
                        MessageBox.Show("修改成功");
                     
                    }
                    catch (ArgumentNullException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                
                }
            }  
        }
4)查询操作
  private void textBox5_TextChanged(object sender, EventArgs e)
        {
            this.dataGridView2.DataSource = ds.Tables[1];
                DataView dv = ds.Tables[1].DefaultView;
                dv.RowFilter = "stucode like   '" + '%' + this.textBox5.Text + '%' + "'";
                this.dataGridView2.DataSource = ds.Tables[1];
      }

datagridview数据绑定操作数据库实现增删改查的更多相关文章

  1. java操作数据库:增删改查

    不多bb了直接上. 工具:myeclipse 2016,mysql 5.7 目的:java操作数据库增删改查商品信息 test数据库的goods表 gid主键,自增 1.实体类Goods:封装数据库数 ...

  2. python测试开发django-13.操作数据库(增删改查)

    前言 django的models模块里面可以新增一张表和字段,通常页面上的数据操作都来源于数据库的增删改查,django如何对msyql数据库增删改查操作呢? 本篇详细讲解django操作mysql数 ...

  3. 9.5Django操作数据库的增删改查

    2018-9-5 18:10:52 先贴上笔记 day61 2018-04-28 1. 内容回顾 1. HTTP协议消息的格式: 1. 请求(request) 请求方法 路径 HTTP/1.1\r\n ...

  4. Java操作数据库实现"增删改查"

    本文主要讲解JDBC操作数据库    主要实现对MySql数据库的"增删改查" 综合概述: JDBC的常用类和接口 一   DriverManager类 DriverManage类 ...

  5. c#操作数据库的增删改查语句及DataGridView简单使用

    下面是要用户名和密码连接数据库的操作: 一.定义连接字符串,用来链接SQL Server string str_con = "server=.(服务器名称一般为 . );database=W ...

  6. C#通过窗体应用程序操作数据库(增删改查)

    为了体现面向对象的思想,我们把“增删改查”这些函数封装到一个数据库操作类里: 为了便于窗体程序与数据库之间进行数据交互,我们建一个具有数据库行数据的类,通过它方便的在窗体程序与数据库之间传输数据: 我 ...

  7. Java数据库连接——JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...

  8. Java数据库连接--JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...

  9. java中如何操作数据库(增删改查)

    EntityManager 是用来对实体Bean 进行操作的辅助类.他可以用来产生/删除持久化的实体Bean,通过主键查找实体bean,也可以通过EJB3 QL 语言查找满足条件的实体Bean.实体B ...

随机推荐

  1. OC语言的特性(一)-消息传递与调用函数的表现形式

    我们在初学Objective-C时,都会觉得ObjC中的消息传递和其他语言的调用函数差不多,只是在OC中,方法调用用消息传递这一概念来代替. 那么到底怎样区别OC中的消息传递与其他语言的调用函数呢. ...

  2. LPC1768的USB-相关结构体定义

    #ifndef __USB_H__ #define __USB_H__ //usb传输数据的宏定义描述 #include "sys.h" typedef __packed unio ...

  3. Android studio开多个窗口引起的问题

    1.clean 的时候,intermediates删不掉 2.出现:app:compile_DebugJavaWithJavac 没有具体错误 出现以上问题的时候只要把多余的删除,记得只留一个在当前窗 ...

  4. selenium IE 浏览器驱动下载地方

    download: http://selenium-release.storage.googleapis.com/index.html

  5. Max Sum of Rectangle No Larger Than K

    Given a non-empty 2D matrix matrix and an integer k, find the max sum of a rectangle in the matrix s ...

  6. 统计学常用概念:T检验、F检验、卡方检验、P值、自由度

    1,T检验和F检验的由来 一般而言,为了确定从样本(sample)统计结果推论至总体时所犯错的概率,我们会利用统计学家所开发的一些统计方法,进行统计检定. 通过把所得到的统计检定值,与统计学家建立了一 ...

  7. ubuntu 16.04 php 安装curl方法

    先查看自己的php是否已经安装了curl.方法如下:1.在web服务器目录( Ubuntu下的通常为 /var/www )新建test.php文件2.编辑文件,键入下面一行代码:<?php ph ...

  8. javascript-变量-作用域

    1.var message;   ----这样定义的变量值为undefined 2.去掉var则为全局变量--message = “100”: 3.function fun(){ var messag ...

  9. Java 之 web.xml(Java之负基础实战)

    多个web.xml会同时生效,先加载tomcat下的web.xml,再加载网站目录下的web.xml. 1.tomcat自带的web.xml 在tomcat的conf目录下 2.自定义web.xml ...

  10. Eclipse 自动生成getter 和 setter

    示例: public String View;//右击View > Source > Generate Getters and Setters... public String view; ...