Динамически добавленные элементы управления в gridview (флажок) исчезают после обратной передачи в asp.net - PullRequest
0 голосов
/ 29 января 2019

Я добавил динамический флажок создания в столбец вида сетки, но он дает мне нулевое значение при нажатии кнопки.

Этот флажок исчезает после обратной отправки.

Вот мой код

protected void grdreport_RowDataBound(object sender, GridViewRowEventArgs e)
{
    int temp = e.Row.Cells.Count;

    temp--;

    if (e.Row.RowType == DataControlRowType.DataRow)
    {

        if (temp >= 3)
        {
            strheadertext1 = grdreport.HeaderRow.Cells[3].Text;

            CheckBox cb1 = new CheckBox();

            cb1.Text = e.Row.Cells[3].Text;

            e.Row.Cells[3].Controls.Add(cb1);

        }

    }
}

и при нажатии моей кнопки, где я проверяю, флажок установлен или не установлен

foreach (GridViewRow item in grdreport.Rows)
{
    if (item.RowType == DataControlRowType.DataRow)
    {
        CheckBox checkbox1 = (CheckBox)item.FindControl("cb1");
        // cb1.Checked = true;
        if (checkbox1.Checked)
        {
        }
    }
}

Ответы [ 2 ]

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

При использовании динамических элементов управления вам необходимо перепривязать данные GridView на каждом PostBack.Поэтому обычно вы используете проверку IsPostBack и привязываете туда данные.Но не делайте этого сейчас.

protected void Page_Load(object sender, EventArgs e)
{
    //normally you would bind here
    if (IsPostBack == false)
    {
        GridView1.DataSource = source;
        GridView1.DataBind();
    }

    //but when using dynamic control inside a gridview, bind here
    GridView1.DataSource = source;
    GridView1.DataBind();
}

Обновление

И вы должны дать динамическому элементу управления идентификатор.Вы ищете cb1, но никогда не назначаете этот идентификатор для флажка.

CheckBox cb1 = new CheckBox();
cb1.ID = "cb1";
0 голосов
/ 29 января 2019

Чтобы получить доступ к значению динамически создаваемого элемента управления во время PostBack, вам необходимо заново создать элемент управления с тем же идентификатором в методе OnInit.Очень мало случаев, когда это необходимо или оправдывает усилия, которые вы должны приложить, чтобы выполнить эту работу - особенно в сценариях, которые включают списки или таблицы.

При этом есть несколько альтернатив, которые вы можете использовать, чтобы установить флажок только для некоторых элементов.Одной из идей было бы добавить обычный столбец флажка (или для более сложных сценариев столбец шаблона).Используйте код или CSS, чтобы скрыть флажок в строках, которые вы не хотите видеть флажок.Таким образом, объект будет там, но пользователи не увидят его в строках, где он скрыт.Это обычно намного проще, чем динамический подход.

...