首页 > 代码库 > DataGridView控件选中单元格、直接在控件中修改信息

DataGridView控件选中单元格、直接在控件中修改信息

                                                           原文取自个人博客:www.jycoder.com欢迎访问

一,获取DataGridView控件中的当前单元格

若要与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;
}
}
}

程序运行结果
DataGridView2

二,直接在DataGridView控件中修改数据

在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;
}
}
}


程序运行结果
122