DataGridView 绑定List<>数据的更新
时间: 2023-12-08 20:03:16 浏览: 63
当 DataGridView 绑定 List<> 数据时,如果 List<> 数据更新了,需要调用 DataGridView 的 Refresh 方法来刷新数据显示。可以通过以下几种方式实现:
1. 直接调用 DataGridView 的 Refresh 方法:
```
dataGridView1.Refresh();
```
2. 将绑定的 List<> 数据重新赋值给 DataGridView 的 DataSource 属性,然后再调用 Refresh 方法:
```
dataGridView1.DataSource = list;
dataGridView1.Refresh();
```
3. 将绑定的 List<> 数据转换为 BindingList<>,然后再将 BindingList<> 赋值给 DataGridView 的 DataSource 属性,这样当 BindingList<> 数据更新时,DataGridView 会自动刷新。
```
BindingList<T> bindingList = new BindingList<T>(list);
dataGridView1.DataSource = bindingList;
```
以上是常见的更新 DataGridView 绑定 List<> 数据的方法,根据具体情况选择合适的方法即可。
相关问题
C# Winform DataGrid 绑定List<> Or ObservableCollection<> 类型无法自动刷新问题
在C# Winform中,如果想要在DataGrid中实时显示List<>或ObservableCollection<>类型的数据,需要手动触发DataGrid的数据刷新。
方法一:使用BindingList<>代替List<>或ObservableCollection<>
可以使用BindingList<>代替List<>或ObservableCollection<>,因为BindingList<>实现了IBindingList接口,该接口在数据源发生改变时会自动刷新绑定的控件。示例代码如下:
```csharp
BindingList<MyData> dataList = new BindingList<MyData>();
dataGridView1.DataSource = dataList;
```
方法二:手动触发DataGrid数据刷新
如果使用List<>或ObservableCollection<>,则需要手动触发DataGrid的数据刷新。可以通过以下两种方式实现:
1. 重新绑定数据源:
```csharp
List<MyData> dataList = new List<MyData>();
dataGridView1.DataSource = null;
dataGridView1.DataSource = dataList;
```
2. 利用BindingSource实现数据刷新:
```csharp
List<MyData> dataList = new List<MyData>();
BindingSource bs = new BindingSource();
bs.DataSource = dataList;
dataGridView1.DataSource = bs;
```
当数据源发生改变时,只需调用BindingSource的ResetBindings方法即可刷新DataGrid中的数据:
```csharp
dataList.Add(new MyData());
bs.ResetBindings(false);
```
以上两种方法都可以实现DataGrid与List<>或ObservableCollection<>类型数据的实时刷新。
c#datagridview数据绑定list
以下是C#中使用DataGridView控件绑定List的示例代码:
1. 首先定义一个数据类Class1,包含两个属性Name和Age:
```csharp
public class Class1
{
public string Name { get; set; }
public int Age { get; set; }
public Class1(string name, int age)
{
Name = name;
Age = age;
}
}
```
2. 在Form中定义一个List<Class1>类型的变量list,并在构造函数中初始化:
```csharp
public partial class Form1 : Form
{
private List<Class1> list;
public Form1()
{
InitializeComponent();
list = new List<Class1>();
}
}
```
3. 在DataGridView控件的DataBindingComplete事件中绑定数据源:
```csharp
private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
dataGridView1.Columns["Name"].HeaderText = "姓名";
dataGridView1.Columns["Age"].HeaderText = "年龄";
}
private void button1_Click(object sender, EventArgs e)
{
list.Add(new Class1("张三", 18));
list.Add(new Class1("李四", 20));
dataGridView1.DataSource = list;
}
```
4. 在DataGridView控件的CellEndEdit事件中更新数据源:
```csharp
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
int rowIndex = e.RowIndex;
DataGridViewRow row = dataGridView1.Rows[rowIndex];
string name = row.Cells["Name"].Value.ToString();
int age = int.Parse(row.Cells["Age"].Value.ToString());
list[rowIndex].Name = name;
list[rowIndex].Age = age;
}
```