【问题标题】:Binding data to controls in a Repeating user control with c#/WinForms使用 c#/WinForms 将数据绑定到重复用户控件中的控件
【发布时间】:2019-06-05 20:12:10
【问题描述】:

我正在开发 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

任何帮助将不胜感激。

【问题讨论】:

  • Tag 值添加到UserControl 并使用该标记值绑定数据。

标签: c# winforms user-controls controls


【解决方案1】:

如果您正在创建自定义用户控件。您可以根据自己的喜好提供数据绑定功能。您可以在构造函数中使用参数来传递数据:

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

【讨论】:

    【解决方案2】:

    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);
    }
    

    现在您可以使用 Tag Value 将数据绑定到适当的UserControl

    【讨论】:

      猜你喜欢
      • 2019-10-08
      • 2014-09-05
      • 1970-01-01
      • 2015-01-30
      • 2013-08-29
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多