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; }
这对我来说可以,