0

コード

    public partial class Table_Traversing : System.Web.UI.Page
        {
        Table table1 = new Table();

        Button button1 = new Button();

        protected void Page_Load(object sender, EventArgs e)
        {
            for (int adding_rows = 0; adding_rows < 4; adding_rows++)
               {
               TableRow table_row1 = new TableRow();
               TableCell table_cell1 = new TableCell();
               TableCell table_cell2 = new TableCell();
               Label The_text = new Label();
               CheckBox checkmate = new CheckBox();
               The_text.Text = "This is the text :-)";
               checkmate.ID = "checkmate";
               table_cell2.Controls.Add(checkmate);
               table_cell1.Controls.Add(The_text);
               table_row1.Controls.AddAt(0, table_cell1);
               table_row1.Controls.AddAt(1, table_cell2);
               table1.Rows.Add(table_row1);
               }
            button1.Text = "click me to export the value";
            form1.Controls.AddAt(0, table1);
            form1.Controls.AddAt(1, button1);
            button1.Click += new EventHandler(button1_Click);     
        }

        void button1_Click(object sender, EventArgs e)
        {
        CheckBox check_or_not = new CheckBox();
         for (int i = 0; i < table1.Rows.Count; i++)
            {
             check_or_not = (CheckBox)table1.Rows[i].FindControl("checkmate");
             Response.Write(check_or_not.Checked.ToString());
             }       
         }
      }

エラー

同じID「チェックメイト」を持つ複数のコントロールが見つかりました。FindControlでは、コントロールに一意のIDが必要です。

説明:現在のWebリクエストの実行中に未処理の例外が発生しました。エラーとそれがコードのどこで発生したかについての詳細は、スタックトレースを確認してください。

例外の詳細:System.Web.HttpException:同じID「checkmate」を持つ複数のコントロールが見つかりました。FindControlでは、コントロールに一意のIDが必要です。

4

2 に答える 2

2

IDに行番号を追加するだけです。

checkmate.ID = "checkmate" + adding_rows.ToString();

そしてもちろん、それをFindControlパラメーターにも追加します。

check_or_not = (CheckBox)table1.Rows[i].FindControl("checkmate" + i.ToString());
于 2010-09-04T05:39:00.550 に答える
0

行ではなくセルにチェックボックスを追加しました。

table_cell2.Controls.Add(checkmate);

したがって、-1つの行にはIDが「checkmate」の複数のセルがあります。

例えば

<tr id="somerow">
   <td><input type="checkbox" id="checkmate"/></td>
   <td><input type="checkbox" id="checkmate"/></td>
</tr>

したがって、行「somerow」内には、IDが「checkmate」の複数のチェックボックスがあります。

チェックボックスを追加するコードは、1つしか追加していないように見えます。したがって、見逃したものである必要があります。

FindControlコードを削除して、実際のHTMLがどのようにレンダリングされるかを確認してください。

于 2010-09-04T05:32:58.800 に答える