- 获取每行每列的值
代码如下:
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
for (int j = 0;j
Console.WriteLine(dataGridView1.Rows[i].Cells[j].Value.ToString());
}
}
数据库中的数据
控制台输出数据
我们一般只要获取每一行的值,每一列写死就行。
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
stu u = new stu();
// 注意 每列的数据和数据库字段一一对应
u.id = Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value.ToString());
u.userName = dataGridView1.Rows[i].Cells[1].Value.ToString();
u.age = Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value.ToString());
if (!StuMod(u))
{
MessageBox.Show("批量修改失败!");
}
}
MessageBox.Show("批量修改成功!");
// 刷新数据
string sqlstr = "select * from stu";
dataGridView1.DataSource = DBHelper.GetDataTable(sqlstr);
}
当然如果不需要按钮的话,可以把代码写到 CellClick事件中。
此例子下载地址:https://wybing.lanzous.com/iJdqYoxwnzc
开发环境为:vs2019 | Sql Server 2016 | .NET Framework 4.5
我们需要考虑到一个问题,如果数据量特别大,那么一次性写入这么多数据会给数据库造成很大的压力。用户不可能一次性修改所有数据,肯定时一条条修改,那么我们可以使用 CellEndEdit事件 用户改一条我们同步一条。
方法二:使用CellEndEdit事件同步用户操作到数据库使用方式也很简单,为dataGridView控件添加CellEndEdit事件
该方法的代码如下:
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
stu u = new stu();
u.id = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString());
u.userName = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
u.age = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString());
if (!StuMod(u))
{
MessageBox.Show("批量修改失败!");
}
}
此例子下载地址:https://wybing.lanzous.com/iesyDoxxi2f
开发环境为:vs2019 | Sql Server 2016 | .NET Framework 4.5
方法三:使用SqlCommandBuilder实现批量修改源代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DataGridView的使用
{
public partial class Form1 : Form
{
// 连接字符串
public static string connString = @"Data Source=.;Initial Catalog=test;Integrated Security=True";
public Form1()
{
InitializeComponent();
}
SqlDataAdapter dapt = null;
DataSet ds = null;
///
/// 实现批量修改
/// 优点:功能强大、操作简单、代码简洁
/// 缺点:只能操作一个表,操作的数据集必须包含主键
///
///
///
private void btnUpdate_Click(object sender, EventArgs e)
{
SqlCommandBuilder builder = new SqlCommandBuilder(dapt);
// Update()方法自动更新ds到数据库
dapt.Update(ds);
MessageBox.Show("修改成功!");
}
private void Form1_Load(object sender, EventArgs e)
{
string sql = "select * from stu"; // SQL语句
SqlConnection conn = new SqlConnection(connString); // //Sql链接类的实例化
dapt = new SqlDataAdapter(sql, conn); // //创建DataAdapter数据适配器实例
ds = new DataSet(); //创建DataSet实例
dapt.Fill(ds); // //使用DataAdapter的Fill方法(填充),调用SELECT命令
// DataSet相当于一个离线的数据库,DataTable相当于一个数据表
DataTable table = ds.Tables[0]; // 将DataSet的一个表给DataTable
this.dataGridView1.DataSource = table;//给DataGridView绑定数据源
}
}
}
参考文章地址:https://www.cnblogs.com/danmao/p/3871650.html
参考百度百科:https://baike.baidu.com/item/SqlCommandBuilder/250793?fr=aladdin
此例子下载地址:https://wybing.lanzous.com/i7pMNoxzuzc
开发环境为:vs2019 | Sql Server 2016 | .NET Framework 4.5
- SqlCommandBuilder:c#中用来批量更新数据库,一般结合adapter使用。
- SqlDataAdapter:DataSet和 SQL Server之间的桥接器。



