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. vue-router query和params参数的区别

    1.query方式传参和接收参数(相当于get请求) this.$router.push({ path:'/home' query:{ id:1 } }) 接收参数: this.$route.quer ...

  2. [学习笔记]连通分量与Tarjan算法

    目录 强连通分量 求割点 求桥 点双连通分量 模板题 Go around the Labyrinth 所以Tarjan到底怎么读 强连通分量 基本概念 强连通 如果两个顶点可以相互通达,则称两个顶点强 ...

  3. Windows和Linux下实现ssh免密登录

    ------------恢复内容开始------------ SSH是一种通讯协议,可以实现远程安全登录.可以通过如putty.MobaXterm等工具通过ssh安全登录到虚拟机进行操作. Opens ...

  4. StartDT AI Lab | 视觉智能引擎之算法模型加速

    通过StartDT AI Lab专栏之前多篇文章叙述,相信大家已经对计算机视觉技术及人工智能算法在奇点云AIOT战略中的支撑作用有了很好的理解.同样,这种业务牵引,技术覆盖的模式也收获了市场的良好反响 ...

  5. VBA自动点击IE的浏览按钮、自动选择路径、自动关闭打开文件对话框

    VBA调用InternetExplorer操作IE浏览器,自动弹出文件选择对话框时,VBA会处于阻塞状态,你必须手工关闭文件选择对话框,VBA才能继续向后运行. 例如下面网址,就有一个文件浏览按钮: ...

  6. UML Learning

    在建筑业中,建模是一项经过检验并被广泛接受的工程技术,建立房屋和大厦的建筑模型,能帮助用户得到实际建筑物的印象.在软件建模中也具有同样的作用,建模提供了系统的蓝图. 建模是为了能够更好地理解正在开发的 ...

  7. 攻防世界web新手区做题记录

    学校信安协会第一次培训结束后的作业,要求把攻防世界的web新手区题目做一遍并写题解. 第一题 view_source 查看源代码右键不能用,但是F12能用,于是找到源代码 输入到flag框即可 后来在 ...

  8. 关于AI行业创业的6个问题

    第一个问题:互联网 vs 人工智能 首先如果今天大家选择创业,我建议更应该关注人工智能,而非互联网.为什么这么讲? 1. 互联网的流量红利已经消失: 以PC来说,全球PC出货量连续5年下滑.大家知道国 ...

  9. Archives: 2018/11

    There are 35 posts in total till now. 11月 11, 2018 HTTP 11月 11, 2018 TCP与UDP 11月 10, 2018 Python测试 1 ...

  10. 90)PHP,提示跳转代码展示

    (1)JS中的Location:href=  来跳转 (2)PHP中的header(“Refresh:time:url:目的url”); 这个Refresh是在发生多少秒后发生变化. 代码展示: be ...