在Windows窗体设计器中绑定对象

时间:2016-05-19 06:15:45

标签: c# winforms windows-forms-designer bindingsource

我试图通过设计器将我的命名空间中的列表绑定到BindingSource。我知道如何在代码中绑定列表,但我也想知道是否可以在设计器中执行相同的操作。

使用“数据源配置向导”,我选择了“对象”,但它只显示了命名空间和类。

enter image description here

我选择了一个带有List的类,然后单击Finish。 enter image description here

这是在选择类名

后在设计器中生成的代码
this.bindingSource1.DataSource = typeof(Template.Form3);

看起来Windows窗体不支持在设计器中绑定列表。我不确定这是正确的方法或Windows窗体不支持它。如果Windows窗体不支持绑定到对象,有人可以解释原因吗?

修改: 我在回答选择数据成员时尝试了该建议,但它没有将绑定源与List中的实际数据绑定。现在设计师代码看起来像

this.bindingSource1.DataMember = "data";
this.bindingSource1.DataSource = typeof(Template.Form3);

1 个答案:

答案 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窗体中的工作原理。