DataGridView知识点

  1. 简单示例

(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[];

}

(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 - ].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, , "CName"); //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名;
sqlCommand.Parameters.Add("@CAddress", SqlDbType.VarChar, , "CAddress");
sqlCommand.Parameters.Add("@CTel", SqlDbType.VarChar, , "CTel");
sqlCommand.Parameters.Add("@CNo", SqlDbType.Char, , "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 > )
{
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, , "CName"); //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名;
sqlCommand.Parameters.Add("@CAddress", SqlDbType.VarChar, , "CAddress");
sqlCommand.Parameters.Add("@CTel", SqlDbType.VarChar, , "CTel");
sqlCommand.Parameters.Add("@CNo", SqlDbType.Char, , "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 == )
{
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 [].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 >)
{
MessageBox.Show("OK");
}
else
MessageBox.Show("not OK");
//int rowAffected = sqlDataAdapter.Update(ClientTable);
sqlConnection.Close();
MessageBox.Show("删除" + i.ToString() + "行。");
//SQL数据适配器根据学生数据表提交更新,并返回受影响行数; }
}
}
}

DataGirdView的更多相关文章

  1. WinForm的DataGirdView判断CheckBox是否被选中

    首先我们先设置下DataGirdView的列. 然后启动下编辑,就可以选中与不选中了.在之后通过. #region 便利被选中的行,然后导出 DataTable dtreport = new Data ...

  2. C# DataGirdview手动添加数据,导出txt文件并自动对齐

    //DataGirdview手动添加数据 private void btnDataGirdView_Click(object sender,EventArgs e) {       dataGridV ...

  3. DataGirdView 常用操作

    1.将数据源的某列添加到已有DataGirdView的列 例如:将文件夹下所有文件名添加到DataGirdView 的文件名一列,图片如下: 首先在datagridview把文件名列的DATAPROP ...

  4. c# DataGirdView动态刷新

    using MySql.Data.MySqlClient;using System; using System.Data; using System.Threading; using System.W ...

  5. c#datagirdview ,用DataSource 方式赋值,然后更新出问题问题

    先说一下程序 主窗体  ,两个子窗体A,B.嵌入主窗体的Panel里边 主窗体,启动类C里边的查找方法,查到的值,通过事件委托送到窗体A C类里同时修改查询表,把修改的查询表通过事件委托发送给窗体B, ...

  6. DataGirdView 设置单元格居中

    设置标题行居中: dgvShow.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter ...

  7. DataGirdView 编辑项时的验证

    dgvConfig.DataSource = CreateTable(); dgvConfig.Columns["编号"].ReadOnly = true; //只读 dgvCon ...

  8. c# datagirdview

    1.设置位于控件最左上角的标题单元格内容 this.dataGridView1.TopLeftHeaderCell.Value = "序号"; 2. 3.

  9. winform窗体(六)——DataGridView控件及通过此控件中实现增删改查

    DataGridView:显示数据表,通过此控件中可以实现连接数据库,实现数据的增删改查 一.后台数据绑定:    List<xxx> list = new List<xxx> ...

随机推荐

  1. TPO3-1 Architecture

    Even development in architecture has been the result of major technological changes. Materials and m ...

  2. 爬虫—文件存储—CSV存储

    一,简介 CSV,全称Comma—Separated Values,可以称为逗号分隔或者字符分隔值,其文件以纯文本形式存储表格数据.该文件是一个字符序列,可以有任意的数目记录组成,记录间已某种换行符分 ...

  3. 在win10下安装ubuntu双系统总结

    在打算装双系统前两天,我事先在网上买了一个16G大小的U盘,用来坐启动盘.后来发现其实有4G大小就远远足够的,16G的太浪费了,忘后来人吸取教训.呜呜呜.....下面给大家讲讲我的安装步骤: 参考文章 ...

  4. Complier

    Complier [2019福建省赛] 模拟题应该有信心写,多出一些样例 当/* 与// 在一起的时候总会出错,一旦出现了这些有效的 应该把它删掉不对后面产生影响 #include<bits/s ...

  5. day25-网络基础

    # 一.子网掩码: # 1. 作用是划分子网,就是将某个ip地址划分成网络地址和主机地址两部分. # 形式上等同于ip地址,也是一个32位二进制数, # 如果它的网络部分(前24位)全为1,主机部分( ...

  6. rest framework-解析器和渲染器-长期维护

    ###############   解析器   ############### # 解析器----数据解析器, # # 前端发送了json数据,在request的body里面, # 我们需要把json ...

  7. [LC] 19. Remove Nth Node From End of List

    Given a linked list, remove the n-th node from the end of list and return its head. Example: Given l ...

  8. python3下scrapy爬虫(第十卷:scrapy数据存储进mysql)

    上一卷中我将爬取的数据文件直接写入文本文件中,现在我将数据存储到mysql中,我依然用的是pymysql,这个很麻烦建表需要在外面建 这次代码只需要改变pipyline就行 来 现在看下结果: 对比发 ...

  9. python3下scrapy爬虫(第六卷:利用cookie模拟登陆抓取个人中心页面)

    之前我们爬取的都是那些无需登录就要可以使用的网站但是当我们想爬取自己或他人的个人中心时就需要做登录,一般进入登录页面有两种 ,一个是独立页面登陆,另一个是弹窗,我们先不管验证码登陆的问题 ,现在试一下 ...

  10. Kintinuous解析

    版权声明:本文为博主原创文章,未经博主允许不得转载. Kintinuous是Thomas Whelan在National University of Ireland Maynooth读博期间的工作,有 ...