DataGridView知识点
- 简单示例
(1)代码
SqlDataAdapter da; DataSet ds; string sql ="select 列名 from 表名"; using(SqlConnection conn=new SqlConnection (DBHelper.connString)) { da=new SqlDataAdapter(sql,conn); ds=new DataSet(); da.fill(ds); DataGridView1.DataSource=ds.Tables[0]; }
(2)代码解析
上面用到了两个类,SqlDataAdapter 和DataSet 。
DataSet对象可以看做是内存中的数据库,相当把数据库中需要的表、数据行、数据列和表之间的关系放到内存中。创建DataSet 后,可以独立出数据,不需要和数据库保持连接。程序可以从DataSet 中直接读取数据。ds.Tables[0]; 表示数据集中的第一张表。
SqlDataAdapter 对象,是用于SQL Server数据库的数据适配器。使用适配器SqlDataAdapter 的步骤是:
1)创建数据库连接对象
SqlConnection conn=new SqlConnection (DBHelper.connString);
2)建立数据库查询语句
string sql ="select 列名 from 表名";
3)通过以上创建的sql语句和连接对象创建SqlDataAdapter对象
SqlDataAdapter da = new SqlDataAdapter(sql,conn);
4)调用SqlDataAdapter 的fill();方法向数据集填充数据。
DataSet ds=new DataSet();
da.fill(ds);
5)有了数据集以后,只需要设置DataGridView控件的DataSource属性。数据集的索引从0开始如果是访问第一张表用Tables[0]表示。
DataGridView1.DataSource=ds.Tables[0];
2.示例
namespace 药品信息管理系统 { public partial class frm_ClientTable : Form { public frm_ClientTable() { InitializeComponent(); this.StartPosition = FormStartPosition.CenterScreen; } private void frm_ClientTable_Load(object sender, EventArgs e) { } private void btn_Load_Click(object sender, EventArgs e) { using (SqlConnection sqlConnection = new SqlConnection(DBHelper.connString)) { SqlCommand sqlCommand = new SqlCommand(); //声明并实例化SQL命令; sqlCommand.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接; sqlCommand.CommandText = "SELECT * FROM tb_Client;"; //指定SQL命令的命令文本;该命令查询所有学生; SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //声明并实例化SQL数据适配器; sqlDataAdapter.SelectCommand = sqlCommand; //将SQL数据适配器的查询命令属性指向SQL命令; DataTable ClientTable = new DataTable(); //声明并实例化数据表,用于保存所有学生,以用作数据网格视图的数据源; sqlConnection.Open(); //打开SQL连接; sqlDataAdapter.Fill(ClientTable); //SQL数据适配器读取数据,并填充学生数据表; sqlConnection.Close(); //关闭SQL连接; this.dgv_Client.Columns.Clear(); //数据网格视图的列集合清空; this.dgv_Client.DataSource = ClientTable; //将数据网格视图的数据源设为学生数据表; this.dgv_Client.Columns["CNo"].HeaderText = "客户编号"; //将数据网格视图的指定列的表头文本设为中文; this.dgv_Client.Columns["CName"].HeaderText = "客户名称"; this.dgv_Client.Columns["CAddress"].HeaderText = "地址"; this.dgv_Client.Columns["CTel"].HeaderText = "联系电话"; this.dgv_Client.Columns["CName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; this.dgv_Client.Columns[this.dgv_Client.Columns.Count - 1].AutoSizeMode = //数据网格视图的最后一列的自动调整列宽模式设为填充(至数据网格视图右侧边缘); DataGridViewAutoSizeColumnMode.Fill; } } private void btn_Update_Click(object sender, EventArgs e) { using (SqlConnection sqlConnection = new SqlConnection(DBHelper.connString)) { SqlCommand sqlCommand = new SqlCommand(); //声明并实例化SQL命令; sqlCommand.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接; sqlCommand.CommandText = //指定SQL命令的命令文本; "UPDATE tb_Client" + " SET CName=@CName,CAddress=@CAddress,CTel=@CTel" + " WHERE CNo=@CNo;"; sqlCommand.Parameters.Add("@CName", SqlDbType.VarChar, 0, "CName"); //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名; sqlCommand.Parameters.Add("@CAddress", SqlDbType.VarChar, 0, "CAddress"); sqlCommand.Parameters.Add("@CTel", SqlDbType.VarChar, 0, "CTel"); sqlCommand.Parameters.Add("@CNo", SqlDbType.Char, 10, "CNo"); SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令; sqlDataAdapter.UpdateCommand = sqlCommand; //将SQL数据适配器的更新命令属性指向SQL命令; DataTable ClientTable = (DataTable)this.dgv_Client.DataSource; //声明数据表,并指向数据网格视图的数据源;数据源默认类型为object,还需强制转换类型; sqlConnection.Open(); //打开SQL连接; int rowAffected = sqlDataAdapter.Update(ClientTable); sqlConnection.Close(); if (rowAffected > 0) { MessageBox.Show("更新" + rowAffected.ToString() + "行。"); } else { MessageBox.Show("not ok"); } //SQL数据适配器根据学生数据表提交更新,并返回受影响行数; } } private void btn_Add_Click(object sender, EventArgs e) { //未完成 using (SqlConnection sqlConnection = new SqlConnection(DBHelper.connString)) { SqlCommand sqlCommand = new SqlCommand(); //声明并实例化SQL命令; sqlCommand.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接; sqlCommand.CommandText = //指定SQL命令的命令文本; "insert tb_Client (CNo,CName,CTel,CAddress)values" + "(@CNo,@CName,@CTel,@CAddress)"; sqlCommand.Parameters.Add("@CName", SqlDbType.VarChar, 0, "CName"); //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名; sqlCommand.Parameters.Add("@CAddress", SqlDbType.VarChar, 0, "CAddress"); sqlCommand.Parameters.Add("@CTel", SqlDbType.VarChar, 0, "CTel"); sqlCommand.Parameters.Add("@CNo", SqlDbType.Char, 10, "CNo"); SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令; sqlDataAdapter.UpdateCommand = sqlCommand; //将SQL数据适配器的更新命令属性指向SQL命令; DataTable ClientTable = (DataTable)this.dgv_Client.DataSource; //声明数据表,并指向数据网格视图的数据源;数据源默认类型为object,还需强制转换类型; sqlConnection.Open(); //打开SQL连接; int i = sqlCommand.ExecuteNonQuery(); if (i == 1) { MessageBox.Show("OK"); } else MessageBox.Show("not OK"); //int rowAffected = sqlDataAdapter.Update(ClientTable); sqlConnection.Close(); MessageBox.Show("添加" + i.ToString() + "行。"); //SQL数据适配器根据学生数据表提交更新,并返回受影响行数; } } private void btn_Delete_Click(object sender, EventArgs e) { //未完成 using (SqlConnection sqlConnection = new SqlConnection(DBHelper.connString)) { SqlCommand sqlCommand = new SqlCommand(); //声明并实例化SQL命令; sqlCommand.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接; sqlCommand.CommandText = //指定SQL命令的命令文本; "delete from tb_Client" + " WHERE CName='"+this.dgv_Client .CurrentRow .Cells [1].ToString ()+"'";; //sqlCommand.Parameters.Add("@CName", SqlDbType.VarChar, 0, "CName"); //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名; //sqlCommand.Parameters.Add("@CAddress", SqlDbType.VarChar, 0, "CAddress"); //sqlCommand.Parameters.Add("@CTel", SqlDbType.VarChar, 0, "CTel"); //sqlCommand.Parameters.Add("@CNo", SqlDbType.Char, 10, "CNo"); SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令; sqlDataAdapter.UpdateCommand = sqlCommand; //将SQL数据适配器的更新命令属性指向SQL命令; DataTable ClientTable = (DataTable)this.dgv_Client.DataSource; //声明数据表,并指向数据网格视图的数据源;数据源默认类型为object,还需强制转换类型; sqlConnection.Open(); //打开SQL连接; int i = sqlCommand.ExecuteNonQuery(); if (i >0) { MessageBox.Show("OK"); } else MessageBox.Show("not OK"); //int rowAffected = sqlDataAdapter.Update(ClientTable); sqlConnection.Close(); MessageBox.Show("删除" + i.ToString() + "行。"); //SQL数据适配器根据学生数据表提交更新,并返回受影响行数; } } } }