# 操作DataGridView控件详解

> 来源：梦飞idc云平台 | 原文：https://www.mfisp.com/10664.html | 发布：2022-09-28 | 更新：2022-09-28 | 分类：建站教程、投稿分享

操作*DataGridView*有两种方式，一种是使用控件绑定的方式，操作的时候只要更改*DataSet*控件的数据集就能够实现*DataGridView*数据的灵活显示；另一种方式是全部使用代码来手工操作*DataGridView*控件的显示，尽量少用控件，使代码看起来更连贯，操作更灵活。

 

控件方法来操作*DataGridView*控件：

  

*（控件方法略，比较简单，拖控件，绑定即可）*

 

代码方法来操作*DataGridView*控件

 

通过上两节，老程序员对数据的简单操作已经很熟练了。现在在第一个实例“*hello word!*”的基础上，继续*DataGridView*控件的手工操作实习。

 

添加一个控件，文本命名如图：

  

![操作DataGridView控件详解](https://www.mfisp.com/wp-content/uploads/2021/10/202209281653256jxFHM.jpeg)

 

我们在上面看到的数据显示时这样的：

  

![操作DataGridView控件详解](https://www.mfisp.com/wp-content/uploads/2021/10/20220928165405yveqda.jpeg)

 

列的头部是数据库表的列段名，因为我们是将*SQL*查询的数据集直接绑定到*DataGridView*控件的。

 

下来我们来改变它的头部，同时，来指定*DataGridView*控件各个列绑定的数据成员。

 

*private void button4_Click(object sender, EventArgs e)*

 

*{*

 

*//*定义数据库连接字符

 

*string str_con = @"Data Source=26-3B72903E783B/SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=testDB;";*

  

*//*定义*SQL*语句字符串

 

*string sql = "select * from danwei";*

 

*// string sql = string.Format("insert into danwei (danwei) values ('{0}')", textBox1.Text);*

 

*//*定义并实例化数据库连接类型变量

 

*SqlConnection conn = new SqlConnection(str_con);*

  

*//*打开数据库连接

 

*conn.Open();*

   

*SqlCommand comm = new SqlCommand(sql, conn);*

 

*SqlDataAdapter da = new SqlDataAdapter(comm);*

  

*DataSet ds = new DataSet();*

 

*da.Fill(ds, "danwei");*

  

*dataGridView1.DataSource = ds;*

 

*dataGridView1.DataMember = "danwei";*

 

*//---------------*以上代码可以直接拷贝*button3*的代码*--------------------*

  

*//*设置*dataGridView1*控件第一列的列头文字

 

*dataGridView1.Columns[0].HeaderText = "*序号*"**;*

 

*//*设置*dataGridView1*控件第一列的列宽

 

*dataGridView1.Columns[0].Width = 80;*

   

*//*设置*dataGridView1*控件第二列的列头文字

 

*dataGridView1.Columns[1].HeaderText = "*单位*"**;*

 

*//*设置*dataGridView1*控件第二列绑定的数据集中第一个数据表的第二列的数据

 

*//*前面说了，*ds*数据集是一个多表的集合

 

*dataGridView1.Columns[1].DataPropertyName = ds.Tables[0].Columns[1].ToString();*

 

*//*设置*dataGridView1*控件第二列的列宽

 

*dataGridView1.Columns[1].Width = 300;*

  

*conn.Close();*

 

*}*

 

运行后，按下*DataGridViewOpar*按钮显示如下：

  

比较原来的；

 

发现就是列头变了，以及下面的滚动条长了，其实数据绑定了。可以将绑定值在代码中互换一下，再看看；

 

上面代码改为：

 

*private**void button4_Click(object sender, EventArgs e)*

 

*{*

 

*….//*省略前面已有的代码

 

*dataGridView1.Columns[0].HeaderText = "*序号*"**;*

 

*dataGridView1.Columns[0].DataPropertyName = ds.Tables[0].Columns[1].ToString();*

 

*dataGridView1.Columns[0].Width = 80;*

  

*dataGridView1.Columns[1].HeaderText = "*单位*"**;*

 

*dataGridView1.Columns[1].DataPropertyName = ds.Tables[0].Columns[0].ToString();*

 

*dataGridView1.Columns[1].Width = 300;*

 

*}*

  

运行后：

 

![操作DataGridView控件详解](https://www.mfisp.com/wp-content/uploads/2021/10/202209281654562KksXW.jpeg)

   

单位和序号的值就换位置了。

  

![操作DataGridView控件详解](https://www.mfisp.com/wp-content/uploads/2021/10/20220928165517n4uhaN.jpeg)

 

**自动添加序号**：

 

动态添加数据的时候，有时候读取数据库的数据*ID*号不是顺序的，这时就需要自己添加自动递增的序号。

 

如图：

 

![操作DataGridView控件详解](https://www.mfisp.com/wp-content/uploads/2021/10/20220928165628cK8ENl.jpeg)

 

这里的序号不是序列的，中间跳了个*2*，做为统计到底有几个单位不直观。我们添加一段代码：

 

*private**void button4_Click(object sender, EventArgs e)*

 

*{*

 

*….//*省略前面已有的代码

 

*dataGridView1.Columns[0].HeaderText = "*序号*"**;*

 

*//dataGridView1.Columns[0].DataPropertyName = ds.Tables[0].Columns[1].ToString();*

 

*dataGridView1.Columns[0].Width = 80;*

  

*dataGridView1.Columns[1].HeaderText = "*单位*"**;*

 

*//dataGridView1.Columns[1].DataPropertyName = ds.Tables[0].Columns[0].ToString();*

 

*// dataGridView1.Columns[1].Width = 300;*

  

*//*自动整理序列号

 

*int coun = dataGridView1.RowCount;*

 

*for (int i = 0; i < coun - 1; i++)*

 

*{*

 

*dataGridView1.Rows[i].Cells[0].Value = i + 1;*

 

*dataGridView1.Rows[i].Cells["danweiid"].Value = i + 1;*

  

*}*

 

*//*因为第一个列值被修改了，所以后面的列值索引就从*0*开始

 

*//*所以单位的值应该对应的是第*0*列

 

*dataGridView1.Columns[0].DataPropertyName = ds.Tables[0].Columns[0].ToString();*

 

*}*

 

运行后，显示：

  

![操作DataGridView控件详解](https://www.mfisp.com/wp-content/uploads/2021/10/20220928165517n4uhaN.jpeg)

   

综上，老程序员已经可以知道：

 

*1，**DataGridView*控件如何用代码绑定数据集；

 

*2，**DataGridView*控件如何如果将指定的列绑定到数据集里的指定数据列；

 

*3，**DataGridView*控件如何动态编辑它的列值；

 

其实通过上面的实习，老程序员已经算很灵活的操作*DataGridView*了，不过为了在项目中更加顺手，老程序员通过查找资料和测试，整理了*DataGridView*控件的用法详解合集。附录如下：

 

（以下代码在如下情况下配置：添加一个*ListBox*控件，在里面显示获取到的值。添加一个*button3*按钮控件，以下功能代码均在该按钮控件的*Click*事件下触发：）

---
本页由 梦飞idc云平台（https://www.mfisp.com）提供。站点导航见 https://www.mfisp.com/llms.txt
