我试图通过设计器将我的命名空间中的列表绑定到BindingSource。我知道如何在代码中绑定列表,但我也想知道是否可以在设计器中执行相同的操作。
使用“数据源配置向导”,我选择了“对象”,但它只显示了命名空间和类。
这是在选择类名
后在设计器中生成的代码this.bindingSource1.DataSource = typeof(Template.Form3);
看起来Windows窗体不支持在设计器中绑定列表。我不确定这是正确的方法或Windows窗体不支持它。如果Windows窗体不支持绑定到对象,有人可以解释原因吗?
修改: 我在回答选择数据成员时尝试了该建议,但它没有将绑定源与List中的实际数据绑定。现在设计师代码看起来像
this.bindingSource1.DataMember = "data";
this.bindingSource1.DataSource = typeof(Template.Form3);
答案 0 :(得分:3)
诀窍是重建您的解决方案,然后在下拉列表中可以看到任何公共类,以从中选择数据源类型。
然后从设计人员点击binding source
(屏幕底部)=> Properties => DataMember =>
在您的班级中选择Property
以绑定到(列表或收藏集)
修改强>
通过设计器绑定允许在设计时生成列,但似乎需要在运行时设置BindingSource的数据。
由于绑定对象不能是静态成员,而是实例成员。
private void bindingForm_Load(object sender, EventArgs e)
{
myDataSourceBindingSource.DataSource = (new myDataSource()).MyDataSourceList;
}
<强>设计强>
//
// colADataGridViewTextBoxColumn
//
this.colADataGridViewTextBoxColumn.DataPropertyName = "ColA";
this.colADataGridViewTextBoxColumn.HeaderText = "ColA";
this.colADataGridViewTextBoxColumn.Name = "colADataGridViewTextBoxColumn";
//
// myDataSourceBindingSource
//
this.myDataSourceBindingSource.DataMember = "MyDataSourceList";
this.myDataSourceBindingSource.DataSource = typeof(myNameSpace.myDataSource);
<强>类别:强>
public class myDataSource
{
public BindingList<myData> MyDataSourceList
{
get
{
var list = new List<myData>()
{
new myData() { ColA = "A" },
new myData() { ColA = "B" }
};
return new BindingList<myData>(list);
}
}
}
public class myData
{
public string ColA { set; get; }
}
我不知道这对您是否有意义,但这就是它在Windows窗体中的工作原理。