一、概念介绍
DataGridView是Windows Forms中数据表格控件,它是WinForm中重要的数据控件之一,可以提供多种功能,如数据绑定、分页、排序、过滤、编辑、选择、格式化、样式控制等,是WinForm中常用的数据控件。
绑定数据源是DataGridView的重要功能之一,它可以将数据源与控件进行绑定,简化了数据显示和管理的过程,使得数据显示和管理更加方便和快捷。
本文将详细介绍DataGridView绑定数据源的方法,包括以下内容:
1.使用数据源绑定控件
2.手动加入数据源
3.使用DataSet绑定数据源
4.使用DataTable绑定数据源
5.使用List集合绑定数据源
6.使用BindingList集合绑定数据源
7.使用BindingSource绑定数据源
二、使用数据源绑定控件
数据源绑定控件是WinForm中常用的一种数据绑定方法,它的主要思想是将数据源与数据控件进行绑定,让控件根据数据源的变化自动刷新数据。以下是使用数据源绑定控件绑定数据源的基本步骤:

1.打开Visual Studio,新建一个窗体应用程序。
2.从工具箱中将DataGridView控件拖放到窗体上。
3.在数据窗口中新建一个数据集,选中数据集,打开属性窗口(可通过点击F4快捷键或者在视图菜单中选中属性窗口),设置数据集的名称和命名空间。
4.右键单击数据集,选择添加->表,添加一个表(或者通过添加数据适配器添加一个表)。
5.在表中加入一些数据(比如姓名、年龄、地址等信息),每个字段都要添加一个列。
6.打开数据窗口中的表,绑定DataGridView控件,在属性窗口中选择“数据绑定”,将DataGridView控件的DataSource属性指定为数据集中的表。
7.在DataGridView控件上右键单击,选择“编辑列”,设置每一列的HeaderText、DataPropertyName等属性值,确保数据可以正确显示。
以上就是使用数据源绑定控件绑定数据源的基本步骤。可以通过运行程序,查看DataGridView控件是否可以正确显示数据。

三、手动加入数据源
在使用数据源绑定控件的时候,我们需要提前创建好数据集和数据表,并在数据表中手动加入数据。如果数据量比较小,手动加入数据并不是什么困难的事情。以下是手动加入数据源的基本步骤:
1.从工具箱中将DataGridView控件拖放到窗体上。
2.手动添加数据表,添加数据列,设置数据类型。
3.通过代码术语,手动添加数据到数据表中。
4.将DataGridView控件的DataSource属性指定为数据表。
5.在DataGridView控件上右键单击,选择“编辑列”,设置每一列的HeaderText、DataPropertyName等属性值,确保数据可以正确显示。
以下是手动加入数据源的示例代码:
```
private void Form1_Load(object sender, EventArgs e)
{
//手动添加数据表
DataTable dt = new DataTable();
//手动添加数据列
DataColumn column1 = new DataColumn("ID", typeof(int));

DataColumn column2 = new DataColumn("Name", typeof(string));
DataColumn column3 = new DataColumn("Age", typeof(int));
DataColumn column4 = new DataColumn("Address", typeof(string));
//将数据列添加到数据表中
dt.Columns.Add(column1);
dt.Columns.Add(column2);
dt.Columns.Add(column3);
dt.Columns.Add(column4);
//手动添加数据
DataRow row1 = dt.NewRow();
row1["ID"] = 1;
row1["Name"] = "张三";
row1["Age"] = 18;
row1["Address"] = "北京市";
dt.Rows.Add(row1);
DataRow row2 = dt.NewRow();
row2["ID"] = 2;
row2["Name"] = "李四";
row2["Age"] = 20;
row2["Address"] = "上海市";
dt.Rows.Add(row2);
DataRow row3 = dt.NewRow();
row3["ID"] = 3;
row3["Name"] = "王五";
row3["Age"] = 22;
row3["Address"] = "广州市";
dt.Rows.Add(row3);

//绑定数据
dataGridView1.DataSource = dt;
//设置每一列的HeaderText和DataPropertyName
dataGridView1.Columns["ID"].HeaderText = "编号";
dataGridView1.Columns["ID"].DataPropertyName = "ID";
dataGridView1.Columns["Name"].HeaderText = "姓名";
dataGridView1.Columns["Name"].DataPropertyName = "Name";
dataGridView1.Columns["Age"].HeaderText = "年龄";
dataGridView1.Columns["Age"].DataPropertyName = "Age";
dataGridView1.Columns["Address"].HeaderText = "地址";
dataGridView1.Columns["Address"].DataPropertyName = "Address";
}
```
四、使用DataSet绑定数据源
DataSet是一种以xml格式存储数据的对象,它可以将多个表格以及它们的关联关系存储在一个对象中,是一种非常方便的数据存储方式。DataSet可以通过DataSet Designer或者代码手写的方式创建,以下是使用DataSet绑定数据源的基本步骤:

1.从工具箱中将DataGridView控件拖放到窗体上。
2.创建数据集。
3.使用Select语句从数据库中读取数据。
4.将数据绑定到DataGridView控件上。
以下是使用DataSet绑定数据源的示例代码:
```
private void Form1_Load(object sender, EventArgs e)
{
//创建数据集
DataSet ds = new DataSet();
//使用Select语句从数据库中读取数据
string connectionString = "server=.;database=Northwind;uid=sa;pwd=123456;";
SqlConnection connection = new SqlConnection(connectionString);
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Customers", connection);
adapter.Fill(ds, "Customers");
//绑定数据
dataGridView1.DataSource = ds.Tables[0];
//设置每一列的HeaderText和DataPropertyName
dataGridView1.Columns["CustomerID"].HeaderText = "编号";
dataGridView1.Columns["CustomerID"].DataPropertyName = "CustomerID";

dataGridView1.Columns["CompanyName"].HeaderText = "公司名称";
dataGridView1.Columns["CompanyName"].DataPropertyName = "CompanyName";
dataGridView1.Columns["ContactName"].HeaderText = "联系人";
dataGridView1.Columns["ContactName"].DataPropertyName = "ContactName";
dataGridView1.Columns["ContactTitle"].HeaderText = "联系人职位";
dataGridView1.Columns["ContactTitle"].DataPropertyName = "ContactTitle";
dataGridView1.Columns["Address"].HeaderText = "地址";
dataGridView1.Columns["Address"].DataPropertyName = "Address";
dataGridView1.Columns["City"].HeaderText = "城市";
dataGridView1.Columns["City"].DataPropertyName = "City";
dataGridView1.Columns["Region"].HeaderText = "地区";
dataGridView1.Columns["Region"].DataPropertyName = "Region";
dataGridView1.Columns["PostalCode"].HeaderText = "邮编";
dataGridView1.Columns["PostalCode"].DataPropertyName = "PostalCode";

dataGridView1.Columns["Country"].HeaderText = "国家";
dataGridView1.Columns["Country"].DataPropertyName = "Country";
dataGridView1.Columns["Phone"].HeaderText = "电话";
dataGridView1.Columns["Phone"].DataPropertyName = "Phone";
dataGridView1.Columns["Fax"].HeaderText = "传真";
dataGridView1.Columns["Fax"].DataPropertyName = "Fax";
}
```
五、使用DataTable绑定数据源
DataTable是一种提供数据存储和检索能力的对象,它是DataSet中最小的单位,可以用来存储从数据库中查询出来的数据,但不包含关系表和表之间的关联关系。以下是使用DataTable绑定数据源的基本步骤:
1.从工具箱中将DataGridView控件拖放到窗体上。
2.创建数据表。
3.使用Select语句从数据库中读取数据。
4.将数据绑定到DataGridView控件上。
以下是使用DataTable绑定数据源的示例代码:
```

private void Form1_Load(object sender, EventArgs e)
{
//创建数据表
DataTable dt = new DataTable();
//使用Select语句从数据库中读取数据
string connectionString = "server=.;database=Northwind;uid=sa;pwd=123456;";
SqlConnection connection = new SqlConnection(connectionString);
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Customers", connection);
adapter.Fill(dt);
//绑定数据
dataGridView1.DataSource = dt;
//设置每一列的HeaderText和DataPropertyName
dataGridView1.Columns["CustomerID"].HeaderText = "编号";
dataGridView1.Columns["CustomerID"].DataPropertyName = "CustomerID";
dataGridView1.Columns["CompanyName"].HeaderText = "公司名称";
dataGridView1.Columns["CompanyName"].DataPropertyName = "CompanyName";
dataGridView1.Columns["ContactName"].HeaderText = "联系人";
dataGridView1.Columns["ContactName"].DataPropertyName = "ContactName";

dataGridView1.Columns["ContactTitle"].HeaderText = "联系人职位";
dataGridView1.Columns["ContactTitle"].DataPropertyName = "ContactTitle";
dataGridView1.Columns["Address"].HeaderText = "地址";
dataGridView1.Columns["Address"].DataPropertyName = "Address";
dataGridView1.Columns["City"].HeaderText = "城市";
dataGridView1.Columns["City"].DataPropertyName = "City";
dataGridView1.Columns["Region"].HeaderText = "地区";
dataGridView1.Columns["Region"].DataPropertyName = "Region";
dataGridView1.Columns["PostalCode"].HeaderText = "邮编";
dataGridView1.Columns["PostalCode"].DataPropertyName = "PostalCode";
dataGridView1.Columns["Country"].HeaderText = "国家";
dataGridView1.Columns["Country"].DataPropertyName = "Country";
dataGridView1.Columns["Phone"].HeaderText = "电话";
dataGridView1.Columns["Phone"].DataPropertyName = "Phone";
dataGridView1.Columns["Fax"].HeaderText = "传真";

dataGridView1.Columns["Fax"].DataPropertyName = "Fax";
}
```
六、使用List集合绑定数据源
List是一种泛型集合,它可以存储同一种数据类型的多个元素,并提供了多种数据操作方法。手动创建List集合并手动添加数据到List集合中是一种常用的数据绑定方法。以下是使用List集合绑定数据源的基本步骤:
1.从工具箱中将DataGridView控件拖放到窗体上。
2.创建List集合。
3.手动添加数据到List集合中。
4.将数据绑定到DataGridView控件上。
以下是使用List集合绑定数据源的示例代码:
```
private void Form1_Load(object sender, EventArgs e)
{
//创建List集合
List
//手动添加数据
customers.Add(new Customer() { CustomerID = "ALFKI", CompanyName = "Alfreds Futterkiste", ContactName = "Maria Anders" });
customers.Add(new Customer() { CustomerID = "ANATR", CompanyName = "Ana Trujillo Emparedados y helados", ContactName = "Ana Trujillo" });

customers.Add(new Customer() { CustomerID = "ANTON", CompanyName = "Antonio Moreno Taqueria", ContactName = "Antonio Moreno" });
customers.Add(new Customer() { CustomerID = "AROUT", CompanyName = "Around The Horn", ContactName = "Thomas Hardy" });
customers.Add(new Customer() { CustomerID = "BERGS", CompanyName = "Berglunds snabbkop", ContactName = "Christina Berglund" });
//绑定数据
dataGridView1.DataSource = customers;
//设置每一列的HeaderText和DataPropertyName
dataGridView1.Columns["CustomerID"].HeaderText = "编号";
dataGridView1.Columns["CustomerID"].DataPropertyName = "CustomerID";
dataGridView1.Columns["CompanyName"].HeaderText = "公司名称";
dataGridView1.Columns["CompanyName"].DataPropertyName = "CompanyName";
dataGridView1.Columns["ContactName"].HeaderText = "联系人";
dataGridView1.Columns["ContactName"].DataPropertyName = "ContactName";
}

class Customer
{
public string CustomerID { get; set; }
public string CompanyName { get; set; }
public string ContactName { get; set; }
}
```
七、使用BindingList集合绑定数据源
BindingList是一种可绑定的泛型集合,它可以将数据与控件进行绑定,当数据发生变化时,控件会自动更新。使用BindingList集合绑定数据源是一种非常方便的数据绑定方式。以下是使用BindingList集合绑定数据源的基本步骤:
1.从工具箱中将DataGridView控件拖放到窗体上。
2.创建BindingList集合。
3.手动添加数据到BindingList集合中。
4.将BindingList集合绑定到DataGridView控件上。
以下是使用BindingList集合绑定数据源的示例代码:
```
private void Form1_Load(object sender, EventArgs e)
{
//创建BindingList集合
BindingList

//手动添加数据
customers.Add(new Customer() { CustomerID = "ALFKI", CompanyName = "Alfreds Futterkiste", ContactName = "Maria Anders" });
customers.Add(new Customer() { CustomerID = "ANATR", CompanyName = "Ana Trujillo Emparedados y helados", ContactName = "Ana Trujillo" });
customers.Add(new Customer() { CustomerID = "ANTON", CompanyName = "Antonio Moreno Taqueria", ContactName = "Antonio Moreno" });
customers.Add(new Customer() { CustomerID = "AROUT", CompanyName = "Around The Horn", ContactName = "Thomas Hardy" });
customers.Add(new Customer() { CustomerID = "BERGS", CompanyName = "Berglunds snabbkop", ContactName = "Christina Berglund" });
//绑定数据
dataGridView1.DataSource = customers;
//设置每一列的HeaderText和DataPropertyName
dataGridView1.Columns["CustomerID"].HeaderText = "编号";
dataGridView1.Columns["CustomerID"].DataPropertyName = "CustomerID";
dataGridView1.Columns["CompanyName"].HeaderText = "公司名称";

dataGridView1.Columns["CompanyName"].DataPropertyName = "CompanyName";
dataGridView1.Columns["ContactName"].HeaderText = "联系人";
dataGridView1.Columns["ContactName"].DataPropertyName = "ContactName";
}
class Customer
{
public string CustomerID { get; set; }
public string CompanyName { get; set; }
public string ContactName { get; set; }
}
```
八、使用BindingSource绑定数据源
BindingSource是一种数据源管理器,它可以用来管理数据源,并将数据源与控件进行绑定。BindingSource可以将多种数据源(如DataTable、DataSet、List、数组等)进行整合,为数据绑定提供了更大的灵活性。以下是使用BindingSource绑定数据源的基本步骤:
1.从工具箱中将DataGridView控件拖放到窗体上。
2.创建BindingSource对象。
3.创建数据集或数据表或集合或数组,从数据库中读取数据或手动添加数据。

4.将数据绑定到BindingSource对象上。
5.将BindingSource对象绑定到DataGridView控件上。
以下是使用BindingSource绑定数据源的示例代码:
```
private void Form1_Load(object sender, EventArgs e)
{
//创建BindingSource对象
BindingSource bs = new BindingSource();
//创建数据集或数据表或集合或数组,从数据库中读取数据或手动添加数据
DataTable dt = new DataTable();
string connectionString = "server=.;database=Northwind;uid=sa;pwd=123456;";
SqlConnection connection = new SqlConnection(connectionString);
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Customers", connection);
adapter.Fill(dt);
//将数据绑定到BindingSource对象上
bs.DataSource = dt;
//将BindingSource对象绑定到DataGridView控件上
dataGridView1.DataSource = bs;
//设置每一列的HeaderText和DataPropertyName

dataGridView1.Columns["CustomerID"].HeaderText = "编号";
dataGridView1.Columns["CustomerID"].DataPropertyName = "CustomerID";
dataGridView1.Columns["CompanyName"].HeaderText = "公司名称";
dataGridView1.Columns["CompanyName"].DataPropertyName = "CompanyName";
dataGridView1.Columns["ContactName"].HeaderText = "联系人";
dataGridView1.Columns["ContactName"].DataPropertyName = "ContactName";
dataGridView1.Columns["ContactTitle"].HeaderText = "联系人职位";
dataGridView1.Columns["ContactTitle"].DataPropertyName = "ContactTitle";
dataGridView1.Columns["Address"].HeaderText = "地址";
dataGridView1.Columns["Address"].DataPropertyName = "Address";
dataGridView1.Columns["City"].HeaderText = "城市";
dataGridView1.Columns["City"].DataPropertyName = "City";
在Datagridview控件中,数据更新和刷新是非常常见的操作。数据更新可以指数据源中的数据有变化,需要及时同步到Datagridview中。而刷新则是指需要重新加载数据源中的数据,更新DataGridView中的显示结果。在此,我们将详细介绍Datagridview绑定数据更新和刷新的相关知识。

一、Datagridview的数据绑定
1.数据源与Datagridview绑定
在Datagridview的使用中,首先要完成的是数据源与Datagridview的绑定。
在Winform开发中,可以通过DataSet、DataTable、List等数据容器来存储数据,然后将数据源与Datagridview进行绑定。
以DataTable为例,下面是一段示例代码:
```csharp
//创建一个DataTable
DataTable dt = new DataTable();
//向DataTable中添加列
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
//向DataTable中添加数据
dt.Rows.Add(1, "张三");
dt.Rows.Add(2, "李四");
//将DataTable绑定到DataGridView上
this.dataGridView1.DataSource = dt;
```
通过以上代码,我们就将DataTable和Datagridview成功地进行了绑定。
2.绑定数据源的方式
在Datagridview中,绑定数据源主要有两种方式:直接绑定和自定义绑定。

直接绑定是指将一个数据容器(如DataTable)直接通过DataGridView的DataSource属性进行绑定。这种方式也是最简单的数据绑定方式。例如,我们可以通过以下代码实现直接绑定:
```csharp
this.dataGridView1.DataSource = dt;
```
自定义绑定则需要更多的代码来定义Datagridview的样式、数据值以及数据源对应关系等信息。自定义绑定主要是对Datagridview的更加灵活的控制,可以实现更丰富多样的数据呈现方式。
例如,我们可以通过以下代码实现自定义绑定:
```csharp
//定义Datagridview的列
DataGridViewColumn col1 = new DataGridViewTextBoxColumn();
col1.Name = "ID";
col1.HeaderText = "编号";
col1.DataPropertyName = "ID";
DataGridViewColumn col2 = new DataGridViewTextBoxColumn();
col2.Name = "Name";
col2.HeaderText = "姓名";
col2.DataPropertyName = "Name";

//将列添加到DataGridView中
this.dataGridView1.Columns.Add(col1);
this.dataGridView1.Columns.Add(col2);
//设置DataGridView的数据源
this.dataGridView1.DataSource = dt;
```
二、Datagridview数据更新
1.手动更新数据
当数据源中的某些数据发生变化时,我们需要及时将这些变化同步到Datagridview中。手动更新数据的方式是指通过代码控制Datagridview的显示,达到将数据源的变化显示在Datagridview中的目的。
假设现在有一个DataTable,其中有一个字段Name的值进行了更改,我们需要将这个更改同步到Datagridview中。代码如下:
```csharp
//找到数据源中Name字段所对应的列索引位置
int column = dt.Columns["Name"].Ordinal;
//找到需要更新的单元格
int row = 1;
DataGridViewCell cell = this.dataGridView1.Rows[row].Cells[column];
//更改单元格的值

cell.Value = https://czxt.haoyundao.net/"王五";
```
执行以上代码后,我们就将数据源中的更改同步到了Datagridview中。
2.自动更新数据
在实际开发中,更改数据可以通过一些数据库操作等方式直接进行,而无需手动控制Datagridview。此时,我们需要使用到Datagridview自身的自动更新机制。
当数据源有新增、删除或修改等操作时,Datagridview会自动进行更新显示。但是,这种自动更新需要满足以下两个条件:
1.数据源需要实现IBindingList接口
2.数据源需要触发ListChanged事件
假设我们有一个DataTable,其中有一项数据被删除,需要将此更改同步到Datagridview。代码如下:
```csharp
//删除数据源中的某一行数据
dt.Rows.RemoveAt(1);
```
我们无需再手动更新Datagridview,Datagridview会自动进行数据更新。
三、Datagridview数据刷新

1.Datagridview数据刷新基础知识
在Datagridview中,数据刷新是指重新绑定数据源,更新DataGridView中的显示结果。在实际操作中,Datagridview数据刷新十分常见。
在使用DataGridView刷新数据之前,需要了解两点:
1.数据源需要重新绑定到DataGridView上,即DataSource属性需要重新指定。
2.需要考虑DataGridView的Column元素,即表格中存在的列一定要与新数据的字段对应,否则会引发异常。
2.数据源重新绑定
当我们在数据库中删除一条记录后,需要重新从数据库中获取数据并显示在Datagridview中。需要先清空当前Datagridview的显示结果,然后重新绑定数据源。
清空显示结果可以通过以下代码实现:
```csharp
this.dataGridView1.DataSource = null;
this.dataGridView1.Rows.Clear();
this.dataGridView1.Refresh();
```
重新绑定数据源可以通过以下代码实现:

```csharp
//重新读取数据源
DataTable dt = GetDataFromSql();
//重新绑定数据源
this.dataGridView1.DataSource = dt;
```
3.列的重新匹配
在重新绑定数据源的情况下,需要手动调整列显示的顺序、列的显示名称、列的数据类型等内容,不然就会出现列与数据源不匹配的情况。
通过DataGridView的Columns属性,可以访问到所有列的信息。根据实际需要,对列的属性进行调整即可完成列与数据源的匹配。
例如,我们可以通过以下代码重新调整列信息:
```csharp
//清空现有列
this.dataGridView1.Columns.Clear();
//重新添加列
DataGridViewColumn col1 = new DataGridViewTextBoxColumn();
col1.Name = "ID";
col1.HeaderText = "编号";
col1.DataPropertyName = "ID";
DataGridViewColumn col2 = new DataGridViewTextBoxColumn();
col2.Name = "Name";

col2.HeaderText = "姓名";
col2.DataPropertyName = "Name";
this.dataGridView1.Columns.Add(col1);
this.dataGridView1.Columns.Add(col2);
```
4.刷新的优化
在数据量较大的情况下,重新绑定数据源会消耗大量的性能,因此需要在刷新时进行优化。
解决方案:在刷新时,只更新需要刷新的行数据,不更新DataGridView所有数据。具体做法可以通过以下代码实现:
```csharp
//记录当前选中行
int selectedrowindex = dataGridView1.SelectedCells[0].RowIndex;
DataGridViewRow selectedRow = dataGridView1.Rows[selectedrowindex];
//重新读取数据源
DataTable dt = GetDataFromSql();
//根据需要刷新的行索引更新相应数据
this.dataGridView1.Rows.Clear();
foreach (DataRow dr in dt.Rows)
{
int index = this.dataGridView1.Rows.Add();
this.dataGridView1.Rows[index].Cells[0].Value = https://czxt.haoyundao.net/dr[/"ID"].ToString();
this.dataGridView1.Rows[index].Cells[1].Value = https://czxt.haoyundao.net/dr[/"Name"].ToString();
//找到需要更新的行并更新
if (Convert.ToInt32(this.dataGridView1.Rows[index].Cells[0].Value) == Convert.ToInt32(selectedRow.Cells[0].Value))
{
for (int i = 0; i < this.dataGridView1.Rows[index].Cells.Count; i++)
{
this.dataGridView1.Rows[index].Cells[i].Selected = true;
}
}
}
```
以上就是关于Datagridview绑定数据更新刷新的详细介绍,希望对大家有所帮助。







