使用c#/ WinForms将数据绑定到重复用户控件中的控件

时间:2019-01-10 21:55:29

标签: c# winforms user-controls controls

我正在使用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

任何帮助将不胜感激。

2 个答案:

答案 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(或任何自定义事件),您将能够对数据更改做出反应并显示它们。 我猜您知道需要创建多少个控件。如果是,您还知道为什么以及需要提供哪些数据。