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

3

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

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

enter image description here

我选择了一个带有List的类并点击了“完成”。 输入图像描述 在选择类名后,这是设计器生成的代码。
this.bindingSource1.DataSource = typeof(Template.Form3);

似乎Windows Forms在设计师中不支持绑定列表。我不确定这是正确的方法还是Windows Forms不支持它。如果Windows Forms不支持绑定到对象,是否有人可以解释原因?
编辑:我尝试了答案中的建议选择数据成员,但它并没有将绑定源与List中的实际数据绑定。现在设计师代码看起来像。
this.bindingSource1.DataMember = "data";
this.bindingSource1.DataSource = typeof(Template.Form3);
1个回答

4
重点是要重建您的解决方案,然后任何公共类都将在下拉列表中可见,以选择数据源类型。
然后从设计器中,点击绑定源(屏幕底部)=> 属性 => DataMember => 选择要绑定到的类中的属性(一个列表或集合)
编辑:
通过设计器进行绑定允许在设计时生成列,但似乎需要在运行时设置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 Forms的工作方式。


谢谢您的回答,我尝试了您的建议,但数据没有绑定到绑定源。现在设计师生成的代码看起来像这样。bindingSource.DataMember =“data”; this.bindingSource.DataSource = typeof(Template.Form3); - Kira
1
我能理解为什么它不起作用。数据源实际上是一种类型,而不是一个对象。如果它是一个对象,你的建议就会起作用。由于设计师绑定了一个类型,我认为在设计师中无法绑定一个对象。 - Kira
你能展示一下“Data”属性吗?它保存了数据源并且你是如何向其中添加数据的? - Zein Makki
数据是Form3类中类型为BindingList的属性。为了测试目的,我随机添加了10个数据。 - Kira
你的程序运行正常吗?如果是,请在回答中分享你的设计师生成的代码。 - Kira
谢谢,我知道这种方法。所以Windows窗体不提供直接支持。 - Kira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接