这是我的代码(这是一个非常简单的例子):
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; }
}
当您按下按钮时,数据IS会添加到列表中,但不会显示在DataGridView
中。我错过了什么?
我已尝试将AutoGenerateColumns
和VirtualMode
设置为true
,但这也无法解决问题。
答案 0 :(得分:3)
已经有一段时间了,自从尝试将List&lt; T&gt;绑定到DataGridViews的WinForms代码以来,我已经切换了工作。如果我没记错的话,无论你绑定什么都需要实现IBindingList,List&lt; T&gt;没有。我可能错了。
无论如何,我使用的是BindingListView,这是非常快速和简单的。你这样做:
List<Customer> customers = GetCustomers();
BindingListView<Customer> view = new BindingListView<Customer>(customers);
dataGridView1.DataSource = view;
你已经完成了。我几年没有看过这个来源,但我相信它包含了List&lt; T&gt;使用实现IBindingList的类。
答案 1 :(得分:2)
但如果我只使用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
中显示数据。
答案 2 :(得分:0)
集中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;
}
答案 3 :(得分:0)
我认为你不能直接将列表绑定到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; }
}
}
答案 4 :(得分:0)
使用数组绑定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; }
}
答案 5 :(得分:-1)
添加到列表后尝试调用dataGridView1.Refresh();
。