从PANEL上取控件的值出现问题了!!
我用(VB。NET)编写的,先在页面中放入一个PANEL,然后点页面中的按钮获取panel上
的 dropdownlist的选择的值显示出来,但是如下代码老是报错,提示为“未设置对象变量!”
麻烦解答!急用!!谢谢
For i = 0 To 10                //pageload事件中,这部分是正确的!控件已经全部显示出来了!
Dim ddl = New DropDownList
ddl.id = "sourceddl" + i.ToString()
ddl.items.add("a")
ddl.items.add("b")
ddl.items.add("c")
Panel1.Controls.Add(ddl)
Next                                          //button1_click事件中
for i=0 to 10
Dim sourceddl = New DropDownList
sourceddl = Panel1.FindControl("sourceddl" & i.ToString())
Response.Write(sourceddl.selecteditem.text)
next

解决方案 »

  1.   

    Panel1.FindControl("sourceddl" & i.ToString())
    这句不对,直接调sourceddl.就可以了。
      

  2.   

    如果直接写response.write(sourceddl1.selecteditem.text)
    而去掉前面的
    Dim sourceddl = New DropDownList
    sourceddl = Panel1.FindControl("sourceddl" & i.ToString())
    他会报错说,名称未声明!
      

  3.   

    1. 定义一个局部变量
      private _Drp as DropDownList 2. 你的 pageload事件中,
      Dim ddl = New DropDownList
    改为
      _Drp = New DropDownList3. 你的 button1_click事件中,
      Dim sourceddl = New DropDownList
    改为
      sourceddl = _Drp
      

  4.   

    sorry! 看错了你的代码了。你的代码应该没有问题。(虽然不应该使用findControl,而应该将DropDownList放入数组中供后边直接读取更好)。估计是你在页面回发时没有让第一部分代码运行。
      

  5.   

    在 Panel1.Controls.Add(ddl) 上设置一个断点,看看点击页面的按钮后是否重新执行了这一行。这一行必须每一次创建页面对象的时候都执行。
      

  6.   

    XP1234()谢谢你的解答,我个人估计也应该不是代码上的错误!
    但是按照你的思路,我应该怎么去修改我的程序呢?各位大哥大姐,谁能够给一段代码,实现我要求的功能,就是在同一张页面里,有一个PANEL
    上面动态生成几个dropdownlist,然后点一个按钮,显示出现在这些dropdownlist上的当前值!急用啊,非常感谢!
      

  7.   

    比如说,你在第一段代码外边有一个 "if not isPostBack" 判断,那么这就是不应该的。第一段代码必须无条件地执行。但是看代码之前,应该根据原理去用调试器验证流程,分析问题的位置,不要抱着头光凭想象看代码。所以我让你设断点去自己分析。问题往往在形式上是不容易看出来的。你一定要自己跟踪程序,了解程序运行机制。
      

  8.   

    那我先去跟踪测试下,同时你能否给段正确代码实现我要求的功能,就是在同一张页面里,有一个PANEL上面动态生成几个dropdownlist,然后点一个按钮,显示出现在这些dropdownlist上的当前值!
      

  9.   

    For i = 0 To 10                //pageload事件中,这部分是正确的!控件已经全部显示出来了!
    Dim ddl = New DropDownList
    ddl.id = "sourceddl" + i.ToString()
    ddl.items.add("a")
    ddl.items.add("b")
    ddl.items.add("c")
    Panel1.Controls.Add(ddl)
    Next   这部分代码放在page_load中,不要放在not ispostback里边
      

  10.   

    mathsword(梦在流浪) 
    谢谢,你的方法是正确的,但是不知道什么原因,谁知道能具体解释一下吗!
      

  11.   

    这样生成的控件在服务端用FindControl方法是取不到值的。要用request的方法才可以。