У меня есть пользовательский элемент управления gridview, который расширяет стандартный элемент управления gridview asp.net. Первый столбец gridview состоит из динамически созданных полей checkbox.
Я назначил событие событию CheckChanged флажков во время события OnRowDataBound, но флажки даже не запускают событие. У меня для свойства autopostback установлено значение true, и они выполняют обратную передачу, но она даже не пытается запустить событие OnCheckChanged.
Вот мой код:
Событие OnRowDataBound вида сетки:
protected override void OnRowDataBound(GridViewRowEventArgs e)
{
base.OnRowDataBound(e);
if (e.Row.RowType == DataControlRowType.DataRow)
{
CheckBox chkSelect = (CheckBox)e.Row.Cells[CheckBoxColumnIndex].FindControl(InputCheckBoxField.CheckBoxID);
if (chkSelect != null)
{
Guid selectedValue = new Guid(DataKeys[e.Row.RowIndex].Value.ToString());
chkSelect.Checked = SelectedValues.Contains(selectedValue);
chkSelect.CheckedChanged += new EventHandler(CheckChanged_click);
}
}
}
Событие CheckChanged:
protected void CheckChanged_click(object sender, EventArgs e)
{
CheckBox chkSelect = (CheckBox)sender;
GridViewRow gvr = (GridViewRow)chkSelect.Parent.Parent;
Guid selectedValue = new Guid(DataKeys[gvr.RowIndex].Value.ToString());
if (chkSelect.Checked && !this.SelectedValues.Contains(selectedValue))
{
this.SelectedValues.Add(selectedValue);
}
else if (!chkSelect.Checked && this.SelectedValues.Contains(selectedValue))
{
this.SelectedValues.Remove(selectedValue);
}
DataBind();
}
Еще одна вещь. Это ИСПОЛЬЗУЕТСЯ для работы, но когда я разрабатывал элемент управления, я обнаружил, что при загрузке страницы он многократно связывался с данными. Я прошел и начал обрезать привязки данных, чтобы они связывались только один раз при загрузке страницы. Это побочный эффект от этого.
Я пытался переместить назначение CheckChanged в OnInit, а также в OnRowCreated, но оно все равно не срабатывает.