0

更新パネル内に動的コントロールを設定しています。手順は次のとおりです。

ステップ1:動的コントロールは、パネル内にあるこのような動的テーブル内に入力されます

<asp:Panel ID="pnlShowDDF" runat="server" Visible="False" ViewStateMode="Enabled">
</asp:Panel>

ステップ2:

         protected void loadTable()
            {
                HtmlTable tblDDF = new HtmlTable();
                var objDDF = new ddf();

            var dsDdfDetail = "DataSet Loaded"
            if (dsDdfDetail.Tables[0].Rows.Count > 0)
            {
                int RowsCount = dsDdfDetail.Tables[0].Rows.Count;
                for (int i = 0; i < RowsCount; i++)
                {
                    HtmlTableRow tblNewRow = new HtmlTableRow();
                    HtmlTableCell tblDdfCell = new HtmlTableCell();
                    tblDdfCell1.Controls.Add(addCheckbox(dsDdfDetail.Tables[0].Rows[i][0].ToString()));
    //The addCheckbox function returns the checkbox with its text


        tblNewRow.Controls.Add(tblDdfCell);
                    tblDDF.Controls.Add(tblNewRow);
                }
            HtmlTableRow htFooterRow = new HtmlTableRow();
            HtmlTableCell htFooterCell = new HtmlTableCell();

            htFooterCell.Controls.Add(DelButton());
//DelButton() is written in below
                htFooterCell.Attributes.Add("class", "pnlFooterRow");
                htFooterCell.ColSpan = 2;
                htFooterRow.Cells.Add(htFooterCell);
                tblDDF.Controls.Add(htFooterRow);
                }
            pnlShowDDF.Controls.Add(tblDDF);
            pnlShowDDF.Visible = true;
        }
protected Button DelButton()
    {
        var btnDelete = new Button();
        btnDelete.ID = "btnDelete";
        btnDelete.Text = "De-Allocate";
        btnDelete.Click += new EventHandler(btnDelete_Click);
        btnDelete.Attributes.Add("class", "button");
        btnDelete.ViewStateMode = ViewStateMode.Enabled;
        return btnDelete;
    }

ステップ 3 btnDelete から動的チェックボックス ID にアクセスする必要がある

void btnDelete_Click(object sender, EventArgs e)
    {
        //Need to access the checkbox id's here
        foreach(Control chk in pnlShowDDF.Controls)
        {
            if(chk is CheckBox)
            {
               CheckBox chkbx= chk as CheckBox;
                if(chkbx.Checked)
                {
                   //Here i need to access the id's which i can't right now
                }
            }
        }
    }

ステップ 4: OnInit で loadTable 関数をリコールしましたが、改善はありません

protected override void OnInit(EventArgs e)
    {
       base.OnInit(e);
        loadTable();
    }

チェックボックスIDにアクセスできるようにするにはどうすればよいですか??

4

1 に答える 1

0

動的コントロールを追加するときはいつでも、Page_Initイベントに追加して適切な ID を割り当てる必要があります。これにより、ポストバックが発生したときに、それらの動的に追加されたコントロールが値とともに再度作成され、他のイベントでアクセスできるようになりますbtnDelete_Click

あなたが欠けているのは、テーブルのセルと行に ID を割り当てることです。ID をチェックボックスに割り当てていることを願っています。

=========================編集======================= ====

これが私と一緒に働いているコードで、btnDelete_Click十分な変更が加えられています。追加したチェックボックスを取得しています。それらのいずれかをチェックすると、値が true になります。

protected void loadTable()
    {
        HtmlTable tblDDF = new HtmlTable();
        //var objDDF = new ddf();

        //DataSet dsDdfDetail = new DataSet();
        //if (dsDdfDetail.Tables[0].Rows.Count > 0)
        //{
            //int RowsCount = dsDdfDetail.Tables[0].Rows.Count;
            for (int i = 0; i < 5; i++)
            {
                HtmlTableRow tblNewRow = new HtmlTableRow();
                HtmlTableCell tblDdfCell = new HtmlTableCell();
                tblDdfCell.Controls.Add(addCheckbox(i.ToString()));
                //The addCheckbox function returns the checkbox with its text


                tblNewRow.Controls.Add(tblDdfCell);
                tblDDF.Controls.Add(tblNewRow);
            }
            HtmlTableRow htFooterRow = new HtmlTableRow();
            HtmlTableCell htFooterCell = new HtmlTableCell();

            htFooterCell.Controls.Add(DelButton());
            //DelButton() is written in below
            htFooterCell.Attributes.Add("class", "pnlFooterRow");
            htFooterCell.ColSpan = 2;
            htFooterRow.Cells.Add(htFooterCell);
            tblDDF.Controls.Add(htFooterRow);
        //}
        pnlShowDDF.Controls.Add(tblDDF);
        pnlShowDDF.Visible = true;
    }
protected Button DelButton()
    {
        var btnDelete = new Button();
        btnDelete.ID = "btnDelete";
        btnDelete.Text = "De-Allocate";
        btnDelete.Click += new EventHandler(btnDelete_Click);
        btnDelete.Attributes.Add("class", "button");
        //btnDelete.ViewStateMode = ViewStateMode.Enabled;
        return btnDelete;
    }
protected CheckBox addCheckbox(string id)
    {
        CheckBox chk = new CheckBox();
        chk.ID = id;
        return chk;
    }
void btnDelete_Click(object sender, EventArgs e)
    {
        //Need to access the checkbox id's here
        foreach (Control chk in pnlShowDDF.Controls)
        {
            if (chk is HtmlTable)
            {
                HtmlTable tbl = (HtmlTable)chk;

                foreach (HtmlTableRow row in tbl.Rows)
                {
                    foreach (HtmlTableCell cell in row.Cells)
                    {
                        foreach (Control chk1 in cell.Controls)
                        {
                            if (chk1 is CheckBox)
                            {
                                CheckBox chkbx = chk1 as CheckBox;
                                if (chkbx.Checked)
                                {
                                    //Here i need to access the id's which i can't right now
                                }
                            }
                        }
                    }
                }
            }
        }
    }
于 2012-09-11T07:31:44.003 に答える