原文取自个人博客:www.jycoder.com欢迎访问
若要与DataGridView进行交互,通常要求用编程的方式发现哪个单元格出于活动状态。如果需要更改单元格,可通过DataGridView控件的CurrentCell属性来获取当前单元格的信息;
语法如下:
Public DataGridViewCell CurrentCell{get;set;}
【例】创建一个Windows应用程序,向窗体中添加一个DataGridView控件,一个Button控件和一个Label控件,主要用于显示数据、获取指定单元格信息以及显示单元格信息。单击Button时会通过DataGridView的CurrentCell属性来获取当前单元格的信息。
代码如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.SqlClient;//记得添加名字空间 namespace DataGridView获取单元格 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } SqlConnection conn;//声明一个SqlConnection变量 SqlDataAdapter sda;//声明一个SqlDataAdapter DataSet ds = null; private void Form1_Load(object sender, EventArgs e) { //实例化变量conn,连接数据库 conn = new SqlConnection("Data Source=JUEYING;Initial Catalog=Student;Integrated Security=True"); //实例化变量sda sda = new SqlDataAdapter("select * from student",conn); //实例化ds ds = new DataSet(); //使用SqlDataAdapter对象的Fill方法填充DataSet sda.Fill(ds,"student"); //设置DataGridView1的数据源 dataGridView1.DataSource=ds.Tables[0]; } private void button1_Click(object sender, EventArgs e) { //使用CurrentCell.RowIndex和CurrentCell.ColumnIndex获取数据列坐标和行坐标 string msg = String.Format("第{0}行,第{1}列",dataGridView1.CurrentCell.RowIndex,dataGridView1.CurrentCell.ColumnIndex); label1.Text = "选择的单元格为:"+msg; } } }
程序运行结果
在DataGridView中修改数据,主要用到DataTable的ImportRow方法和DataAdapter对象的update方法。实现的过程是通过DataTable的ImportRow方法将更改后的数据复制到一个DataTable中,然后通过DataAdapter对象的Update方法,将DataTable中的数据更新的数据库。
ImportRow方法用于将DataRow复制到DataTable中,且保留任何属性设置以及初始值和当前值。
语法如下:
[code lang="" start="" highlight=""]Public void ImportRow(DataRow row)[/code]
【例】创建一个Windows应用程序,添加一个DataGridView控件和两个Button,DataGridView用于显示数据,两个Button分别用来加载数据和修改数据
代码如下
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.SqlClient; namespace DataGridView修改数据 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } SqlConnection conn;//声明一个SqlConnection变量 SqlDataAdapter adapter;//声明一个SqlDataAdapter DataSet ds = null; private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { //实例化变量conn,连接数据库 conn = new SqlConnection("Data Source=JUEYING;Initial Catalog=Student;Integrated Security=True"); //实例化变量sda adapter = new SqlDataAdapter("select * from student", conn); //实例化ds ds = new DataSet(); //使用SqlDataAdapter对象的Fill方法填充DataSet adapter.Fill(ds, "student"); //设置DataGridView1的数据源 dataGridView1.DataSource = ds.Tables[0]; //禁止显示行标题 dataGridView1.RowHeadersVisible = false; //禁用按钮 button1.Enabled = false; } //建立一个DataTable类型的方法 private DataTable dbconn(string strSql) { conn.Open();//打开连接 this.adapter = new SqlDataAdapter(strSql,conn);//实例化对象 DataTable dtSelect = new DataTable();// int rnt = this.adapter.Fill(dtSelect);// conn.Close();//关闭连接 return dtSelect;//返回DataTable对象 } private void button2_Click(object sender, EventArgs e) { if (dbUpdate())//判断返回值是否为true { MessageBox.Show("修改成功!");// } } private Boolean dbUpdate()// { string strSql = "select * from student";//声明Sql语句 DataTable dtUpdate = new DataTable(); dtUpdate = this.dbconn(strSql);//实例化DataTable对象 dtUpdate.Rows.Clear();//调用Clear方法 DataTable dtShow = new DataTable(); dtShow = (DataTable)this.dataGridView1.DataSource; for (int i = 0; i < dtShow.Rows.Count; i++)//循环遍历 { dtUpdate.ImportRow(dtShow.Rows[i]);//ImportRow方法填充值 } try { this.conn.Open();//打开连接 SqlCommandBuilder cb = new SqlCommandBuilder(this.adapter);//声明SqlCommandBuilder变量 this.adapter.Update(dtUpdate);//调用Update方法更新数据 this.conn.Close();//关闭连接 } catch (Exception ex) { MessageBox.Show(ex.Message.ToString());//出现异常弹出异常信息 return false; } dtUpdate.AcceptChanges();//向数据库调教更改 return true; } } }
程序运行结果