绑定DataGridView到List<不显示数据
本文关键字:显示 数据 List DataGridView 绑定 | 更新日期: 2023-09-27 17:49:21
这是我的代码(它是一个非常简单的例子):
public partial class Form1 : Form
{
List<Person> listPersons;
public Form1()
{
InitializeComponent();
listPersons = new List<Person>();
dataGridView1.DataSource = listPersons;
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text.Length > 0)
{
Person p = new Person();
p.Name = textBox1.Text;
listPersons.Add(p);
}
}
}
class Person
{
public string Name { get; set; }
}
当您按下按钮时,数据被添加到列表中,但它没有显示在DataGridView
中。我错过了什么?
我尝试将AutoGenerateColumns
和VirtualMode
设置为true
,但这也没有解决问题。
已经有一段时间了,自从在WinForms代码中尝试将List
在任何情况下,我使用的是BindingListView,它非常快速和简单。你只需要:
List<Customer> customers = GetCustomers();
BindingListView<Customer> view = new BindingListView<Customer>(customers);
dataGridView1.DataSource = view;
你完成了。我已经好几年没看过源代码了,但我相信它包含了列表<</p>
但是如果我只使用BindingList<T>
而不是List<T>
,它确实有效。
示例代码:
BindingList<Person> bl;
public Form1()
{
InitializeComponent();
bl = new BindingList<Person>();
dataGridView1.DataSource = bl;
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text.Length > 0)
{
Person p = new Person();
p.Name = textBox1.Text;
bl.Add(p);
textBox1.Text = "";
textBox1.Focus();
}
}
但我仍然想弄清楚如何显示数据在DataGridView
与列表绑定后。
集中你的FillGrid
功能,并在你想更新网格时调用它
public Form1()
{
InitializeComponent();
listPersons = new List<Person>();
FillGrid();
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text.Length > 0)
{
Person p = new Person();
p.Name = textBox1.Text;
listPersons.Add(p);
FillGrid();
}
}
private void FillGrid()
{
dataGridView1.DataSource = listPersons;
}
使用array绑定datagridview
public partial class Form1 : Form
{
Person[] listPersons = new Person[0];
public Form1()
{
InitializeComponent();
dataGridView1.DataSource = listPersons;
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text.Length > 0)
{
Person p = new Person();
p.Name = textBox1.Text;
Array.Resize<Person>(ref listPersons, listPersons.Length+1);
listPersons[listPersons.Length-1]=p;
dataGridView1.DataSource = listPersons;
}
}
}
class Person
{
public string Name { get; set; }
}
我不认为你可以直接绑定list到datagridview。而是使用BindingList。
public partial class Form1 : Form
{
BindingList<Person> lstBinding;
public Form1()
{
InitializeComponent();
lstBinding = new BindingList<Person>();
dataGridView1.DataSource = lstBinding;
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text.Length > 0)
{
Person p = new Person();
p.Name = textBox1.Text;
lstBinding.Add(p);
FillGrid();
}
}
private void FillGrid()
{
dataGridView1.DataSource = lstBinding;
}
}
class Person
{
private string name;
public string Name
{
get {return name;}
set { name = value; }
}
}
添加到列表后尝试调用dataGridView1.Refresh();