Требуется обработчик событий для работы с динамически добавленным элементом управления, который взаимодействует с другим динамически добавленным элементом управления - PullRequest
0 голосов
/ 27 апреля 2019

Мне нужна динамически добавляемая метка с событием click, чтобы добавить строку в динамически добавляемую сетку данных. Я знаю, как заставить обработчик событий работать с динамически добавляемой меткой, но я не уверен, как заставить его работать и с сеткой данных.

Я попытался добавить параметр datagridview в обработчик событий, но это не работает для меня.

Код для создания сетки данных и ярлыков ссылок.

foreach (DataRow rows in dtbl.Rows)
            {

                // Create Datagridview
                DataGridView datagridview = new DataGridView();

                // Create link labels
                LinkLabel linkLabel = new LinkLabel();

                // Add event handler to the link labels
                linkLabel.Click += new EventHandler(this.linkLabel_Click); 

                this.Controls.Add(datagridview);
                this.Controls.Add(linkLabel);
            }

// Event handler 

  private void linkLabel_Click(object sender, EventArgs e)
        {
            // This doesnt work because "datagridview" doesnt exist, but I just have no idea how to get this to interact with the dynamically created datagridviews.


            int rowIndex = datagridview.Rows.Add();
            DataGridViewRow row = datagridview.Rows[rowIndex];
            row.Cells[0].Value = "5";
            datagridview.CurrentCell = row.Cells[0];
        }


I expect each link label to add a new row to the datagridview it was created with in the for loop. But I just don't how to code it.

1 Ответ

1 голос
/ 27 апреля 2019

В вашем цикле foreach, где вы создаете LinkLabel и DataGridView, вы можете назначить ссылку DataGridView на LinkLabel. Предполагая, что вы делаете это в Windows Form или WPF, вы можетеиспользуйте свойство Tag элемента управления:

linkLabel.Tag = datagridView;

Затем, в вашем событии click, получите ссылку:

LinkLabel linkLabel = (LinkLabel)sender;
DataGridView datagridView = (DataGridView)linkLabel.Tag;
...