本人菜鸟,欢迎好心人,不欢迎喷子
文章目录
我的环境::
vs2022 + mysql.Data.dll
mysql 5.7
Navicat
操作步骤
单表绑定(不涉及其他表中的字段)
应对需求:对 用户信息表、学生信息表 等单个表的增删改
在数据库中创建一个表,可填入一些数据用来看效果。如图。
注意:id为自动递增
- 将一个DataGridView拖放到界面上,并添加对应的列。如图。
- 设置每列的DataPropertyName为对应的字段名。如图。
想不想绑定id字段都可以。我这里直接绑定是因为在绑定之后,id那一列可以设置为隐藏(列属性visible设置为false)。
- 将DataSet中的DataTable作为中间桥梁,完成mysql数据库表与DataGridView的绑定
DataSet ds;
MySqlDataAdapter adapter;
MySqlCommandBuilder cb;
private void show()
{
//创建DataSet集合,用来放置查询出来的数据
ds = new DataSet();
adapter = new MySqlDataAdapter("select * from test_table", Program.myDB.conn);//sql语句也可以带有where语句
adapter.Fill(ds); //将查询结果放入DataSet中(确切的说是放在ds.Tables[0]里面,类型为DataTable)
cb = new MySqlCommandBuilder(adapter);//必需的,否则不能简单直接地将改动提交给mysql数据库。仅在单表中有效。
//将DataTable表与界面上的DataGridView绑定,直接显示表中数据
dataGridView3.DataSource = ds;
dataGridView3.DataMember = ds.Tables[0].TableName;
}
private void Form4_Load(object sender, EventArgs e)
{
show();
}
MysqlDataAdapter官方文档说明,其父类DbCommandBuilder官方文档说明
- “保存更改”按钮代码(button的click事件)
//点击后将修改mysql数据库
private void button1_Click(object sender, EventArgs e)
{
adapter.Update(ds.Tables[0]);//将改动提交给数据库
}
注意:该按钮中的代码如果放到DataGridView.CellEndEdit事件中则没有效果,原因未知
id 转换(DataGridView中的DataGridViewComboBoxColumn列绑定)
应对需求:数据库中的 id 需直接转化为其他字段信息,如校长查看某班班主任不是想看老师的id,而是想看老师的名字,并允许老板将其修改为其他老师。
DataGridViewComboBoxColumn
比较特殊,除了拥有一个和其他列一样的DataPropertyName
用来绑定主表中某一字段,自身还拥有一套独立的数据源用来“翻译”主表中此处的值。
此时执行的话,则dataGridView显示的和mysql中的schedule表一模一样,id全都暴露出来了
此处对class_id进行修改
此处从class表中获取班级的id及班级名称
//显示班级名称
DataGridViewComboBoxColumn dcc = dataGridView1.Columns["class_cb"] as DataGridViewComboBoxColumn;//班级那一列
dcc.DataSource = class_list;
dcc.DisplayMember = class_list.Columns["name"].ColumnName;//班级名字
dcc.ValueMember = class_list.Columns["id"].ColumnName;//班级id
运行效果:
实际上此处变化的仍然是id值,只不过表面显示的是对应的班级名字,起到“翻译”的作用。
点击”保存更改“按钮,调用adapter_schedule.Update(ds_schedule);
即可实际修改mysql数据
然而,adapter.Update()方法只能修改单个表,一旦其查询语句里带有其他表,便无法进行增删改(比如adapter=new MysqlDataAdapter("select A.stu_id,B.id,B.name from
A left join B on A.stu_id=B.id
,conn))
于是,该用下面的办法来替代Update方法了。虽然没有Update方法简便,但还是比我自己的笨办法好多了QAQ
一个DataGridView与多个mysql数据表绑定,完成“增删改”
应对需求: 用户看到的“报名表”包含学生个人基本信息和家长信息,可实际上是使用学生表+家长表拼接完成的。这种情况下需要“增删改”信息
可先在MSDN中了解DataTable.GetChange()方法和DataRow.RowState属性
private void button1_Click(object sender, EventArgs e)
{
DataSet temp0=ds_entry_form.GetChanges();
if(temp0==null)
{
Console.WriteLine("temp0为空");
return;
}
DataTable temp = temp0.Tables[0];
Console.WriteLine($"改动了{temp.Rows.Count}行");