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. RedBlack-Tree(红黑树)原理及C++代码实现

    众所周知,红黑树是用途很广的平衡二叉搜索树,用过的都说好.所以我们来看看红黑树的是怎么实现的吧. 红黑树顾名思义,通过红与黑两种颜色来给每个节点上色.其中根结点和叶子结点一定是黑色的,并且红色结点的两 ...

  2. python,winreg,获取当前系统的桌面绝对路径

    import winreg import os def main(): new_path = os.path.join(desktop_path(), 'aaa.xlsx') # 结果为:C:\\Us ...

  3. certutil

    计算摘要 certutil -hashfile inst.ini MD2 certutil -hashfile inst.ini MD5 certutil -hashfile inst.ini SHA ...

  4. 吴裕雄--天生自然python Google深度学习框架:深度学习与深层神经网络

  5. python语法基础-文件操作-长期维护

    ###############    python-简单的文件操作  ############### # python中文件的操作 # 文件操作的基本套路 # 1,打开文件,默认是是只读方式打开文件 ...

  6. Resin介绍及其使用配置

    Resin介绍及其使用配置一 Resin是一个提供高性能的,支持 Java/PHP 的应用服务器.目前有两个版本:一个是GPL下的开源版本,提供给一些爱好者.开发人员和低流量网站使用:一种是收费的专业 ...

  7. JQuery实现复制数据到剪贴板之各种麻花与右键点击弹出选择菜单

    1.如果小伙伴们只是想实现点击某个按钮(通过click事件)实现复制功能. 那小哥哥我在这里推荐大家使用2个非常好用的插件 (1)clipboard.js:纯js插件,无需flash,相对来说更轻量级 ...

  8. django-crontab使用

    用 django-crontab 为 Django 添加定时任务 需求 做后台开发的时候,有时候会遇到这样的需求,在某个固定时间或者一定时间间隔自动触发某一事件.比如说我有一个需求要求是,周一到周五早 ...

  9. 如何回收VCSA 6自带的vPostgres数据库空间

    最近有学生连续反应由于VCSA磁盘空间满了,导致服务无法正常启动,寻求压缩数据库空间的问题.首先说下,VCSA的数据库是没办法图形界面管理的, 它的内置vPostgres数据库的管理只能通过命令行来完 ...

  10. [LC] 198. House Robber

    You are a professional robber planning to rob houses along a street. Each house has a certain amount ...