1

ボタンがクリックされたときに実行時にドロップダウンリストを作成し、動的ドロップダウンリストから選択したテキストを取得するために別のボタンを配置しました。ドロップダウンリストから選択したテキストを取得しようとすると、オブジェクト参照が設定されていないというエラーが表示されます。以下は私のコードです.

TableRow tr;
    TableCell tc;
    DropDownList dp;
    TextBox txt;
    protected void Button1_Click(object sender, EventArgs e)
    {

        int no = int.Parse(TextBox1.Text);
        for (int i = 0; i < no; i++)
        {
            tr = new TableRow();
            tr.BorderStyle = BorderStyle.Groove;
            for (int j = 0; j < 1; j++)
            {
                tc = new TableCell();
                tc.BorderStyle = BorderStyle.Groove;
                dp = new DropDownList();
                //form1.Controls.Add(dp);
                txt = new TextBox();
                dp.Items.Add("hello");
                tc.Controls.Add(dp);
                tc.Controls.Add(txt);
                tr.Cells.Add(tc);
            }

            Table1.Rows.Add(tr);

        }
    }
    protected void Button2_Click(object sender, EventArgs e)
    {

        TextBox1.Text =((DropDownList)this.FindControl("dp")).SelectedItem.Text;


    }
4

2 に答える 2

4

このようにすることはできません。すべての要求で、新しいページ オブジェクトと、その中のすべてのコントロールの新しいコピーを取得することに注意してください。動的に追加するコントロールは、毎回同じ方法で追加する必要があります。そうしないと、存在しません。

この場合、ボタンがクリックされたときに一度追加します。button2 をクリックすると、リクエストが生成され、ドロップダウンリストを持たない新しいページ オブジェクトが作成されます。これは、button1 ハンドラーにのみ追加されるためです。

最も簡単な方法は、ドロップダウン リストを通常どおりにページに追加することですが、Visible を false に設定するだけです。次に、ボタン 1 をクリックしたときに、Visible を true に設定します。これにより、ドロップダウンリストが常に存在することが保証されます。

動的コントロールは扱いにくいため、特に ASP.Net を初めて使用する場合は、可能な限り避ける必要があります。

于 2009-08-19T06:50:28.130 に答える
0

実際、私はそれを機能させることができました..

テーブルを作成する前にデータセットを作成してから、次のようにします。

   tc = new TableCell();
   dd= new DropDownList();
   ddl.ID = dd1;

   foreach (DataRow dr in dst.Tables[0].Rows)
   {
      ddl.Items.Add(new ListItem(dr["Text"].ToString(),dr["Value"].ToString()));
   }
   tcActions.Controls.Add(ddlActions);

私は専門家でも何でもないので、自分のやりたいようになるまでつつくだけです。

于 2013-03-08T18:59:06.463 に答える