winForms + DataGridView绑定到List <T>

我试图将一个List<T>绑定到一个DataGridView控件,我没有任何运气创build自定义绑定。

我努力了:

 gvProgramCode.DataBindings.Add(new Binding("Opcode",code,"Opcode")); 

它抛出一个exception,说这个属性名没有find。

问题栏的名称是“操作码”。 List<T>属性的名称是Opcode。

回答编辑 :问题是,我没有在我的课作为属性,只是公共领域的可绑定领域…显然它不反映在领域,只是属性。

你是否也绑定到Opcode上的属性?如果你想直接绑定到List,你只需要DataSource = list。 数据绑定允许自定义绑定。 你想要做的不是数据源?

你正在得到一堆空行? 自动生成的列有名字吗? 你有没有validation数据是在对象(不只是string.empty)?

  class MyObject { public string Something { get; set; } public string Text { get; set; } public string Other { get; set; } } public Form1() { InitializeComponent(); List<MyObject> myList = new List<MyObject>(); for (int i = 0; i < 200; i++) { string num = i.ToString(); myList.Add(new MyObject { Something = "Something " + num , Text = "Some Row " + num , Other = "Other " + num }); } dataGridView1.DataSource = myList; } 

这应该工作正常…

我无法确切地告诉你想要用你包含的例子来做什么,但是如果你只想列出这些对象的话,绑定到一个通用的对象列表是非常简单的:

  private BindingSource _gridSource; private BindingSource GridSource { get { if (_gridSource == null) _gridSource = new BindingSource(); return _gridSource; } } private void Form1_Load(object sender, EventArgs e) { List<FluffyBunny> list = new List<FluffyBunny>(); list.Add(new FluffyBunny { Color = "White", EarType = "Long", Name = "Stan" }); list.Add(new FluffyBunny { Color = "Brown", EarType = "Medium", Name = "Mike" }); list.Add(new FluffyBunny { Color = "Mottled", EarType = "Short", Name = "Torvald" }); GridSource.DataSource = list; dataGridView1.Columns["EarType"].Visible = false; //Optionally hide a column dataGridView1.DataSource = GridSource; } 

如果您只想显示列表types的特定属性,则应该能够使不需要的列不可见。

从技术上讲,你并不需要创buildBindingSource,但是如果我有更新或更改的话,我发现它更容易一些。

希望这可以帮助。

有同样的问题…我明显有公共领域的结构。 没有在网格中。 提供公共获得者,工作。

我发现另一个解决scheme是使用BindingList集合。

 private void Form1_Load(object sender, EventArgs e) { BindingList people= new BindingList { new Person {Name="John",Age=23}, new Person {Name="Lucy",Age=16} }; dataGridView1.DataSource= people; } 

这对我来说可以,