C#:直接在DataGridView控件中修改数据


    在DataGridView控件中修改数据,主要用到DataTable的ImportRow方法和DataAdapter对象的Update方法。实现的过程是通过DataTable的ImportRow方法将更改后的数据复制到一个DataTable中,然后通过DataAdapter对象的Update方法,将DataTable中的数据更新到数据库中。

    ImportRow方法用于将DataRow复制到DataTable中,且保留任何属性设置以及初始值和当前值。

    语法如下:

Public void ImportRow( DataRow row )

其中,row是要导入的DataRow。

   

    默认情况下,用户可以通过在当前的DataGridView文本框单元格中输入或按F2键来编辑该单元格的内容。在控件单元格中编辑内容的前提是DataGridView控件已启用以及单元格、行、列和控件的ReadOnly属性都设置为false。ReadOnly属性用于指示用户是否可以编辑DataGridView控件的单元格。

 

   下面演示如何在DataGridView控件中直接修改数据,然后进行批量更新。

public partial class Form1 : Form{

    public Form1(){

       InitializeComponent();

    }

    SqlConnection sqlCon;     //声明一个SqlConnection变量

    SqlDataAdapter adapter; //声明一个SqlDataAdapter变量

 

    //--------------连接数据库,绑定DataGridView控件-----------------

    private voidbutton1_Click(object sender, EventArgs e){

       //实例化SqlConnection变量conn,连接数据库

       sqlCon =new SqlConnection("server=.;database=db_16;uid=sa;pwd=");

       //实例化SqlDataAdapter对象

       SqlDataAdapter sda = newSqlDataAdapter("select* from tb_emp", sqlCon);

       //实例化DataSet对象

       DataSet ds = new DataSet();

       //使用SqlDataAdapter对象的Fill方法填充DataSet

       sda.Fill(ds);

       //设置dataGridView1控件的数据源

       dataGridView1.DataSource = ds.Tables[0];

       //禁止显示行标题

       dataGridView1.RowHeadersVisible = false;

       //使用for循环设置控件的列宽

       for (int i = 0; i< dataGridView1.ColumnCount;i++ ){

           dataGridView1.Columns[i].Width = 84;

        }

        //禁用按钮

       button1.Enabled = false;

       //将控件设置为只读

       dataGridView1.Columns[0].ReadOnly = true;

    }

 

    //-----------------建立一个DataTable的方法-----------------------

    private DataTabledbconn(string strSql){

        sqlCon.Open();    //打开连接

        //实例化SqlDataAdapter对象

        this.adapter = new SqlDataAdapter(strSql, sqlCon);

       //实例化DataTable对象

        DataTable dtSelect = newDataTable();

       //使用Fill方法填充DataTable对象

        int rnt = this.adapter.Fill(dtSelect);

       //关闭连接

        sqlCon.Close();

       //返回DataTable对象

        returndtSelect;

    }

 

    //-------------更新数据库----------------------------

    private BooleandbUpdate(){

       //声明SQL语句

        string strSql = "select* from tb_emp";

       //实例化DataTable

        DataTable dtUpdate = newDataTable();

        //创建一个DataTable

        dtUpdate= this.dbconn(strSql);

       //调用Clear方法

        dtUpdate.Rows.Clear();

        //实例化DataTable

        DataTable dtShow = newDataTable();

        dtShow =(DataTable)this.dataGridView1.DataSource;

        //使用for循环遍历行

        for (int i = 0; i< dtShow.Rows.Count; i++){

           //使用ImportRow方法复制dtShow中的值

            dtUpdate.ImportRow(dtShow.Rows[i]);

        }

        try{

            this.sqlCon.Open();  //打开连接

            SqlCommandBuilder CommandBuiler;   //声明SqlCommandBuilder变量

           CommandBuiler = new SqlCommandBuilder(this.adapter);

            this.adapter.Update(dtUpdate);   //调用Update方法更新数据库

            this.sqlCon.Close();  //关闭连接

        }

        catch (Exceptionex){

            MessageBox.Show(ex.Message.ToString());

            return false;

        }

        //提交更改

       dtUpdate.AcceptChanges();

        return true;

    }

 

    //--------------------修改DataGridView控件中选中单元格的值-------------------

    private voidbutton2_Click(object sender, EventArgs e){

        if (dbUpdate())

        {

            MessageBox.Show("修改成功!");

        }

    }

}

你可能感兴趣的:(.NET那些事)