我正在使用WinForms UI,我们有一个需要动态添加重复控件的要求。 我设法用所有标签和文本框创建了一个UserControl,并像这样添加它们:
for (int i= 0; i < 4;i ++) {
tableLayoutPanel1.Controls.Add(new MyUserControl(),1,1);
//1,1 represent 1st row, 1st column of tablelayoutpanel
}
现在我无法找到将不同数据绑定到每个控件的方法。例如:每次添加新的用户控件时,我需要在每个文本框中显示不同的联系信息。但是由于其相同的UserControl,文本框和标签具有相同的名称,我不确定如何使用相同的UserControl绑定不同的数据。
我需要这样的东西:我能够反复添加控件,但不能绑定数据: Screenshot
任何帮助将不胜感激。
答案 0 :(得分:0)
将UserControl
添加到TableLayoutPanel
的示例
for (int nCount = 0; nCount < 2; nCount++)
{
CheckUserControl uc = new CheckUserControl();
//If required Assign Value to the control
uc.strValue = "Item " + nCount;
uc.strTag = nCount.ToString();
//You can pass the Column and Row value dynamically
tableLayoutPanel1.Controls.Add(uc, 1, 1);
}
现在,您可以使用“标记值”将数据绑定到适当的UserControl
答案 1 :(得分:0)
如果要创建自定义用户控件。您可以为喜欢的人提供数据绑定功能。您可以在构造函数中使用参数来传递数据:
public MyUserControl(MyData mydata):this()
{ ...
}
您可以提供一个属性,以便以后设置所需的数据:
public class MyUserControl()
{
...
public MyData MyDataSource {get;set;}
}
您冷传递了一个收集数据的函数:
public MyUserControl(func<MyData> mydata):this()
{
}
或某种服务来检索数据:
public MyUserControl(IMyService myService):this()
{
Textbox1.Text = myService.GetImportantText();
}
如果MyData实现INotifyPropertyChanged(或任何自定义事件),您将能够对数据更改做出反应并显示它们。 我猜您知道需要创建多少个控件。如果是,您还知道为什么以及需要提供哪些数据。