У меня есть веб-форма, где пользователь вводит идентификатор своего сотрудника в текстовое поле, нажимает кнопку поиска, а затем выбирает свое имя из результатов поиска (список переключателей). Как только они выбирают свое имя, TabContainer становится видимым со многими вкладками. На каждой вкладке есть список флажков с серией задач, которые они выбирают по мере их выполнения. Завершив выбор элементов, они нажимают кнопку «Отправить», чтобы сохранить записи в базе данных. Кнопка CheckBox List и Submit создаются динамически при выборе новой вкладки.
Список CheckBox корректно заполняется на каждой вкладке, и создается кнопка «Отправить». Однако при нажатии кнопки обработчик событий не срабатывает.
Чтобы устранить неполадки, я жестко запрограммировал кнопку внутри панелей вкладок (вместо динамического создания кнопки отправки), и обработчик событий срабатывает, но код не выполняется, когда он пытается отправить данные в базу данных, говоря «Список флажков». нулевой. Я попытался найти список флажков, но он не найден. После прочтения множества подобных вопросов здесь и в других местах, я полагаю, что это потому, что он не существует на момент отправки.
Что мне нужно сделать, чтобы найти кнопку «Отправить» и список флажков при нажатии кнопки?
Вот мой код:
protected void tabTaskContainer__ActiveTabChanged(object sender, EventArgs e)
{
CheckBoxList cbl = new CheckBoxList();
cbl.ID = "cblCat";
this.tabTaskContainer.ActiveTab.Controls.Add(cbl);
//run query to populate checkboxlist
int category = tabTaskContainer.ActiveTabIndex;
using (MySqlConnection conn = new MySqlConnection())
{
conn.ConnectionString = "connection_string_here";
using (MySqlCommand cmd = new MySqlCommand())
{
cmd.CommandText = "select t2.employee_id, t1.task as 'task',t1.task_id as 'task_id', ifnull(t2.is_complete,0) as 'completed'" +
" from" +
" (select task_id, task" +
" from hot_tasks" +
" where responsibility = 'new-hire'" +
" and category_id = " + category + ") t1" +
" left join" +
" (select employee_id, task_id, is_complete" +
" from completed_hot" +
" where employee_id = @employeeID) t2 on t1.task_id = t2.task_id;";
cmd.Parameters.AddWithValue("@employeeID", Convert.ToInt64(txtEmpID.Text));
cmd.Connection = conn;
conn.Open();
using (MySqlDataReader sdr = cmd.ExecuteReader())
{
while (sdr.Read())
{
ListItem item = new ListItem();
item.Text = sdr["task"].ToString();
item.Value = sdr["task_id"].ToString();
item.Selected = Convert.ToBoolean(sdr["completed"]);
cbl.Items.Add(item);
}
}
}
conn.Close();
}
Button btnSubmit = new Button();
btnSubmit.ID = "btnSubmit";
btnSubmit.Text = "Submit";
btnSubmit.CausesValidation = false;
btnSubmit.Click += new System.EventHandler(btnSubmit_Click);
tabTaskContainer.ActiveTab.Controls.Add(btnSubmit);
}
И код для кнопки Отправить:
protected void btnSubmit_Click(object sender, EventArgs e)
{
CheckBoxList cbList = tabTaskContainer.FindControl("cblCat") as CheckBoxList;
if(cbList != null)
{
using (MySqlConnection conn = new MySqlConnection())
{
conn.ConnectionString = "server=connection string here";
using (MySqlCommand cmd = new MySqlCommand())
{
cmd.CommandText = "INSERT INTO completed_hot (employee_id, task_id, date_completed, is_complete, empID_taskID) " +
"VALUES(@empid, @taskid, curdate(), @isCompleted, CONCAT(@empID,@taskID)) " +
"ON DUPLICATE KEY UPDATE " +
"date_completed = curdate(), is_complete = @isCompleted;";
cmd.Connection = conn;
conn.Open();
foreach (ListItem item in cbList.Items)
{
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@empID", rblSearchResults.SelectedValue);
cmd.Parameters.AddWithValue("@taskID", item.Value);
cmd.Parameters.AddWithValue("@isCompleted", item.Selected);
cmd.ExecuteNonQuery();
}
conn.Close();
}
}
tabTaskContainer.ActiveTab = tabTaskContainer.Tabs[tabTaskContainer.ActiveTabIndex + 1];
}
}