将DataGridView绑定到List <T>不显示数据
这是我有的代码(它是一个非常简单的例子):
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
,但这也未能解决问题。
已经有一段时间了,自从尝试将List <T>绑定到DataGridViews的WinForms代码之后,我已经切换了作业。 如果我没有记错,无论你绑定什么,都需要实现IBindingList,哪个List <T>不需要。 我可能是错的。
无论如何,我使用的是BindingListView,它非常快速和容易。 你只需要:
List<Customer> customers = GetCustomers();
BindingListView<Customer> view = new BindingListView<Customer>(customers);
dataGridView1.DataSource = view;
你完成了。 我几年没有看过源代码,但我相信它会用实现IBindingList的类来包装List <T>。
但如果我只使用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();
}
}
但我仍然想知道如何在使用List与其DataGridView
后在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;
}
链接地址: http://www.djcxy.com/p/67967.html
上一篇: Binded DataGridView to List<T> not showing data
下一篇: Changing data in a dataframe with hierarchical indexing