3

私は制御を追加しました

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        CheckBox chk = new CheckBox();
        chk.EnableViewState = true;
        chk.Enabled = true;
        chk.ID = "chkb";


        DataRowView dr = (DataRowView)e.Row.DataItem;
        chk.Checked = (dr[0].ToString() == "true");


        e.Row.Cells[1].Controls.Add(chk);
        e.Row.TableSection = TableRowSection.TableBody;
    }

で見つけようとしています

     if (GridView2.Rows.Count>0)
    {
        foreach (GridViewRow row in GridView2.Rows)
        {
            CheckBox cb =(CheckBox) GridView2.Rows[2].Cells[1].FindControl("chkb");
            if (cb != null && cb.Checked)
            {
                Response.Write("yest");
            }

        }
    }

しかし、私はそれを見つけることができません...実際に私の問題は、動的リストを作成する必要があることです..そのために私はgridviewを使用しています

4

1 に答える 1

2

ポストバックは現在のライフサイクルの最後に破棄されるため、すべてのポストバックで動的コントロールを作成する必要があります。ただし、通常は行わRowDataBoundれることをデータバインドするときにのみトリガーされます(最初のページの読み込み時)。GridViewif(!IsPostBack)

RowCreated代わりに、すべてのポストバックで呼び出される動的コントロールを作成する必要があります。が最初にトリガーされるRowDataBoundため、必要に応じてこれらのコントロールをデータバインドできます。RowCreated

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        CheckBox chk = new CheckBox();
        chk.EnableViewState = true;
        chk.Enabled = true;
        chk.ID = "chkb";
        e.Row.Cells[1].Controls.Add(chk);
    }
}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var chk = (CheckBox)e.Row.FindControl("chkb");
        // databind it here according to the DataSource in e.Row.DataItem
    }
}
于 2013-02-07T13:49:42.550 に答える