Привязка данных к элементам управления в повторяющемся пользовательском элементе управления c # / WinForms - PullRequest
0 голосов
/ 11 января 2019

Я работаю над 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.

Мне нужно что-то вроде этого: я могу добавлять элементы управления несколько раз, но не могу связать данные: Скриншот

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Если вы создаете пользовательские элементы управления. Вы можете предоставить возможности привязки данных для ваших лайков. Вы можете использовать параметр в конструкторе для передачи данных в:

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 (или любое другое пользовательское событие), вы сможете реагировать на изменения данных и отображать их. Я думаю, вы знаете, сколько элементов управления необходимо создать. Если да, вы также знаете, почему и какие данные вам нужно предоставить.

0 голосов
/ 11 января 2019

Пример добавления 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

...