0

チェックボックスを動的に生成していますが、これはすべてpage_loadに書き込まれ、エラーを表示しているチェックボックスをチェックしようとすると、

エラー行:

CheckBox cb = (CheckBox)Page.FindControl("chk" + j);

エラー: 同じ ID '1' を持つ複数のコントロールが見つかりました。FindControl では、コントロールに一意の ID が必要です

私の要件は次のとおりです。

チェックボックスをチェックすると、チェックされたチェックボックスの数がカウントされ、チェックされたチェックボックスに関連するラジオボタンが表示されます。

以下はコードです:

      string strfromdt = Session["leavefrm"].ToString();
        DateTime startDate = Convert.ToDateTime(strfromdt);
        string strtodt = Session["leaveto"].ToString();
        DateTime endDate = Convert.ToDateTime(strtodt);

        string strdays = Session["noofdays"].ToString();
        float daysf = float.Parse(strdays);
        float days = (float)Math.Ceiling(daysf);
        CheckBox chk;
        Label lbl;
        RadioButton rd;

        days++;

                OleDbCommand cmd;
                DbConnection.Open();
                cmd = new OleDbCommand("select HOL_DATE from IND_HOLIDAYS", DbConnection);
                OleDbDataAdapter da = new OleDbDataAdapter(cmd);
                DataTable dt = new DataTable();
                da.Fill(dt);


                for (int j = 1; j <= days - 1; j++)
                {
                    while(startDate <= endDate)
                    {
                        for (int i = 0; i <= dt.Rows.Count - 1; i++)
                        {
                            string strdate = dt.Rows[i]["HOL_DATE"].ToString();
                            DateTime date = Convert.ToDateTime(strdate);

                            if (startDate == date)

                                startDate = startDate.AddDays(1);
                        }

                        if ((startDate.DayOfWeek == DayOfWeek.Saturday) || ((startDate.DayOfWeek == DayOfWeek.Sunday)))
                        {
                            startDate = startDate.AddDays(1);
                            continue;
                        }
                        break;
                    }


                    chk = new CheckBox();
                    chk.ID = j.ToString();
                    chk.AutoPostBack = true;
                    // chk.Checked = true;
                    lbl = new Label();
                    lbl.Text = startDate.ToString("dd/MM/yyyy");
                    lbl.ID = j.ToString();
                    PlaceHolder1.Controls.Add(lbl);
                    PlaceHolder1.Controls.Add(chk);

                    PlaceHolder1.Controls.Add(new RadioButton { });

                    PlaceHolder1.Controls.Add(new LiteralControl("<BR>"));

                    startDate = startDate.AddDays(1);



                    CheckBox cb = (CheckBox)Page.FindControl("chk" + j);

                   //chk.Checked = CheckBox1Checked;
                   //chk.oncheckedchanged += CheckBox1OnChecked;

                    int chkcount = 0;
                    if (chk.Checked)
                    {
                        chkcount++;
                    }
                    int chkcount1 = chkcount;
                }
4

2 に答える 2

0

これらがすべての場合に正しく機能するためには、OnInit メソッドに動的コントロールを追加する必要があります。Page_Load に追加された動的コントロールに問題があったことを覚えています。

同じ ID が別のコントロールに追加されていることで、RGraham が既に指摘しているエラーがあります。

また、何の目的もないように見えるこのステートメントがあります

PlaceHolder1.Controls.Add(new RadioButton { });

于 2013-09-25T12:35:24.707 に答える