Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# asp.net中的动态下拉列表_C#_Asp.net_Drop Down Menu_Dynamic Controls - Fatal编程技术网

C# asp.net中的动态下拉列表

C# asp.net中的动态下拉列表,c#,asp.net,drop-down-menu,dynamic-controls,C#,Asp.net,Drop Down Menu,Dynamic Controls,我在运行时单击一个按钮时创建了dropdownlist。我还单击了另一个按钮以从动态dropdownlist获取所选文本。当我尝试从dropdownlist检索所选文本时,会出现名为object reference not set的错误,下面是我的代码 TableRow tr; TableCell tc; DropDownList dp; TextBox txt; protected void Button1_Click(object sender, EventA

我在运行时单击一个按钮时创建了dropdownlist。我还单击了另一个按钮以从动态dropdownlist获取所选文本。当我尝试从dropdownlist检索所选文本时,会出现名为object reference not set的错误,下面是我的代码

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;


    }
TableRow-tr;
TableCell tc;
下拉列表dp;
文本框txt;
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
int no=int.Parse(TextBox1.Text);
for(int i=0;i
你不能这样做。请记住,在每个请求中,您都会得到一个新的页面对象,以及其中所有控件的新副本。动态添加的任何控件每次都必须以相同的方式添加,否则它将不存在

在本例中,单击按钮时添加一次。当您单击button2时,将生成一个请求,并创建一个不再包含dropdownlist的新页面对象,因为它只添加到button1处理程序中

最简单的方法是将dropdownlist正常添加到页面中,但只是将Visible设置为false。然后,当他们单击按钮1时,将Visible设置为true。这将确保您的dropdownlist始终存在


动态控件很棘手,应该尽可能避免使用,特别是如果您是ASP.Net新手。

您不能这样做。请记住,在每个请求中,您都会得到一个新的页面对象,以及其中所有控件的新副本。动态添加的任何控件每次都必须以相同的方式添加,否则它将不存在

在本例中,单击按钮时添加一次。当您单击button2时,将生成一个请求,并创建一个不再包含dropdownlist的新页面对象,因为它只添加到button1处理程序中

最简单的方法是将dropdownlist正常添加到页面中,但只是将Visible设置为false。然后,当他们单击按钮1时,将Visible设置为true。这将确保您的dropdownlist始终存在


动态控件很棘手,应该尽可能避免使用,特别是如果您是ASP.Net的新手。

事实上,我能够让它正常工作

我在创建表之前创建了一个数据集,然后:

   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);

我不是专家或什么的,我只是啄食它,直到我让它做我想做的。

事实上,我能够让它工作

我在创建表之前创建了一个数据集,然后:

   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);
我不是专家,我只是啄食它,直到我让它做我想做的