文章目录
前言
提示:此次案例是点击DataGridView组件触发的事件
例如:当DataGridView加载完sql表内的数据之后,用户点击表内的一条行数据,相应的数据信息会显示在下方的文本框内。如下:
提示:以下是本篇文章正文内容,下面案例可供参考
逻辑思路:
1):先创建窗体
2):构造slq 方法,因为数据很多,要考虑用到集合类,如果只是一条信息,那么用User类即可
3):绑定点击DataGridView触发的事件
4):对页面的文本框进行赋值,再进行其他的操作,例如,更新,删除
一、创建窗体
创建窗体之后要引入集合的命名空间,不然会报错
using System.Collections.ObjectModel;
//sql类也是
二、sql方法
提示:使用集合需要引入命名空间,不然会报错
using System.Collections.ObjectModel;
sql代码如下(示例):
//返回集合类型
public Collection<User> ReadUser()
{
//创建集合对象
Collection<User> result = new Collection<User>();
MySqlConnection con = new MySqlConnection(str);
MySqlCommand cmd = new MySqlCommand();
try
{
con.Open();
cmd.Connection = con;
cmd.CommandText = "select * from tb_user ";
MySqlDataReader reader = cmd.ExecuteReader();
//注: 此前这里是if,但是由于数据多,要用while循环遍历
while (reader.Read())
{
User user = new User();
user.Name = reader["name"].ToString();
user.Tel = reader["tel"].ToString();
user.Sex = reader["sex"].ToString();
user.Password = reader["password"].ToString();
//添加到集合里面
result.Add(user);
}
}
catch (Exception ex)
{
//出现异常,并返回异常信息
User user = new User();
user.Tel = ex.Message;
result.Add(user);
}
finally
{
con.Close();
}
//返回集合
return result;
}
三、对DataGridView绑定鼠标点击事件
代码如下(示例):
int index; //方法之外定义一个变量
private void dataGridView1_MouseClick(object sender, MouseEventArgs e)
{
//if语句是对数据有无的判断,即这个dataGridView1的这一行有没有数据,
//若没有这个判断,无数据时点击dataGridView会出现异常
if(this.dataGridView1.CurrentRow == null)
{
return;
}
//获取这一行的信息
index = this.dataGridView1.CurrentRow.Index;
//对文本框的赋值
txtname.Text = users[index].Name;
txtpass.Text = users[index].Password;
txtsex.Text = users[index].Sex;
txttel.Text = users[index].Tel;
}
提示:这里针对一个误区的讲解,很多人得到别人的源码时,会对着源码敲,但是要学会知晓或者熟悉某些方法的来源
对listfrm窗体加载数据
//定义sql类对象
yyl_mysql sql = new yyl_mysql();
//创建user集合类对象users
Collection<User> users = new Collection<User>();
public listfrm()
{
InitializeComponent();
//调用上述的集合类方法,以users为中间过渡,不直接赋值
users = sql.ReadUser();
//users间接给dataGridView1赋数据源
dataGridView1.DataSource = users;
}
四、运行效果
这样的效果已经实现出来了,剩下的就是完善修改和删除按钮的功能,对于修改和删除不熟悉的兄弟可以看看我以往的博客。
五、删除
由于tel值是主键,我们可以将txttel的属性更改为不可用,即 Enabled : false
代码如下(示例): 直接调用即可
private void button2_Click(object sender, EventArgs e)
{
string tel = txttel.Text;
if(sql.Delete(tel))
{
MessageBox.Show("删除成功!");
//这两句的即是重新读取数据库,再给dataGridView1赋值(删除后的数据),
users = sql.ReadUser();
dataGridView1.DataSource = users;
}
else
{
MessageBox.Show("删除失败!");
}
}
六、修改
提示:这里的修改是以一个User类对象接收信息,并向数据库方法传入一个类对象调用,我以往的修改方法是以字符串形式,如果数据量太多,字符串显而不合适
代码如下(示例): 直接调用即可
private void button1_Click(object sender, EventArgs e)
{
User user = new User();
user.Name = txtname.Text;
user.Tel = txttel.Text;
user.Sex = txtsex.Text;
user.Password = txtpass.Text;
if (sql.Updata(user))
{
MessageBox.Show("修改成功!");
//不可缺少,及时更新dataGridView1数据信息
users = sql.ReadUser();
dataGridView1.DataSource = users;
}
else
{
MessageBox.Show("修改失败!");
}
}
针对于User类的参数修改方法,这里我给一个参考
代码如下(示例): 直接调用即可
//lsitfrm Update
//修改: sql方法接收一个User类对象
public bool Updata(User user)
{
bool k = false;
MySqlConnection con = new MySqlConnection(str);
MySqlCommand cmd = new MySqlCommand();
try
{
con.Open();
cmd.Connection = con;
cmd.CommandText = "UPDATE tb_user SET name = @name, sex = @sex , password = @password WHERE tel = @tel";
cmd.Parameters.Add("name", user.Name);
cmd.Parameters.Add("tel", user.Tel);
cmd.Parameters.Add("password", user.Password);
cmd.Parameters.Add("sex", user.Sex);
int i = cmd.ExecuteNonQuery();
if (i > 0) k = true;
else k = false;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
k = false;
}
finally
{
con.Close();
}
return k;
}
至此以上功能都已实现,对于更新和删除的运行效果你们可以自行运行便知。
总结
以上就是今天要讲的内容,有什么不懂的可以私信给我,或者评论,我都会一一解答。