将临时数据添加到列表并将其绑定到DataGridView Winform
我想将临时数据放入通用列表并将其绑定到datagridview。
但是,我只能在datagridview中放置1行,我想像输入数据库一样输入多行。将临时数据添加到列表并将其绑定到DataGridView Winform
这是我试过的,请告诉我如何解决它。谢谢:))
MyClass
{
private List<object> _list = new List<object>();;
public MyClass()
{
}
protected void OnClickButton(object sender, args e)
{
_list.Add(new { Name = textBoxName.Text, Gender = genderComboBox.Text });
dataGridView1.DataSource = _list;
}
}
非常感谢!我真的很担心这个问题。
您可以使用BindingList<object>
而不是List<object>
,例如, :
BindingList<object> bList = new BindingList<object>();
public MyClass()
{
}
private void button1_Click(object sender, EventArgs e)
{
bList.Add(new { Name = "Foo", Gender = "Bar" });
dataGridView1.DataSource = bList;
}
与您的代码的问题是,您要添加的元素_list
,然后你通过名单,作为网格的数据源。 第一次一切正常。下次它不起作用,因为DataGridView.DataSource
属性在内部执行检查,验证传递的对象是否等于(或更好的引用等于)到当前,并且它什么都不做。
BindingList<T>
工作,因为它暴露事件(由网格内部使用)报告列表被修改时,所以基本上你也可以避免每次除了第一个以外的时候传递给DataSource
。
作为一个方面说明,我建议你使用特定的类(如图@Alex answer),而不是放一个匿名类的object
列表。
例如使用像Person
自定义类,你可以传递一个空BindingList<Person>
到grid.DataSource
然后添加其他Person
对象没有任何问题。
相反,您不能将空的BindingList<object>
传递给grid.DataSource
,因为它导致无列网格,因此无法添加任何具有公共属性的元素(因为公共属性转换为列)之后。因此,您需要传递至少一个定义了对象的BindingList<object>
,以便网格可以理解列的内容并创建它们。
非常感谢您先生解释和回答我的问题。 :)) – 2012-02-18 13:50:55
@rjtubera:不客气。我刚刚添加了一个关于为什么自定义类优于匿名类的解释,如果您有兴趣。 – digEmAll 2012-02-18 16:06:03
使用ObservableCollection<T>
,而不是名单
似乎DataGridView中总是需要,如果你用它自己的方式进行复位。
public class Person
{
public String Name { get; set; }
public String Gender { get; set; }
}
// Your control
private List<Person> _persons = new List<Person>();
// Click Event
dataGridView1.DataSource = null;
_persons.Add(new Person() { Name = "Test", Gender = "Male" });
dataGridView1.DataSource = _persons;
这将刷新当前数据在DataGridView在列表
使用BindingList<T>
似乎是虽然适当的方式。 (感谢@digEmAll)
private BindingList<Person> _persons = new BindingList<Person>();
// Load Event
dataGridView1.DataSource = _persons;
private void button1_Click(object sender, EventArgs e)
{
_persons.Add(new Person() { Name = "Test", Gender = "Male" });
}
那么,你只添加了1个项目的列表 - 你试过添加另一个? – Alex 2012-02-18 13:00:33
@alex我只能添加一次。如果我再次单击该按钮,则什么都不会发生,:/ – 2012-02-18 13:03:19