protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        Table mytb = new Table();
        mytb.Width = 1000;
        mytb.BorderWidth =1;
        string TYPE_ID = GridView1.SelectedValue.ToString();//课程类型(一级目录的id)
        string[] strID=new string[5];//存放2级分类的id
        string[] strTITLE=new string[5];//存放2级分类的title
        string[] strk = new string[200];//
        Int16 k=0;//统计dropdownlist的个数
        Int16 i = 0;//二级目录的个数,循环变量
        SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\PJS.mdf;Integrated Security=True;User Instance=True");//建立数据库连接con
        SqlCommand com1 = new SqlCommand("SELECT COUNT(*) FROM PJ_STAND WHERE parents=@ID1", con);
        com1.Parameters.Add("@ID1", TYPE_ID);
        con.Open();//打开连接
        Int16 count2 = 0;//定义二级分类的个数(即评教体系的个数)
        count2 =Convert.ToInt16(com1.ExecuteScalar());
        SqlCommand com2 = new SqlCommand("SELECT DISTINCT TITLE,ID FROM PJ_STAND WHERE PARENTS=@ID1", con);
        com2.Parameters.Add("@ID1", TYPE_ID);
        SqlDataReader DR = com2.ExecuteReader();
        try
        {
            while(DR.Read())
            {
                strID[i] = DR["ID"].ToString();//把二级分类的ID存入strID[]数组
                strTITLE[i] = DR["TITLE"].ToString();//把二级分类的TITLE存入数组strTITLE[]
                i++;
            }
        }
        finally
        {
            DR.Close();
        }
        for (; i > 0; i--) {
            string[] gs = new string[20];
            TableRow tr = new TableRow();//增加一行
            TableCell tc = new TableCell();
            tc.Text = strTITLE[i-1];//二级目录的title 
            tc.BorderWidth =1;
            tr.Cells.Add(tc);
            mytb.Rows.Add(tr);
            SqlCommand comcount = new SqlCommand("SELECT COUNT(*) FROM PJ_STAND WHERE PARENTS=@IDCOUNT", con);
            comcount.Parameters.Add("@IDCOUNT", strID[i - 1]);
            Int16 count3 = Convert.ToInt16(comcount.ExecuteScalar());//取出二级目录下三级目录的个数存入count3变量
            tc.RowSpan = (count3 + 1);//设置二级目录的跨行数目
            SqlCommand com3 = new SqlCommand("SELECT DISTINCT TITLE,ID  FROM PJ_STAND WHERE PARENTS=@ID1", con);
            comcount.Parameters.Clear();//清除comcount的参数
           com3.Parameters.Add("@ID1",strID[i-1]);//二级目录的id
           SqlDataReader mydr = com3.ExecuteReader();
           while (mydr.Read()) {
  ///////////////////////////////////////////////////////////////增加一个标题行存放三级目录
               TableRow trr = new TableRow();
               TableCell tcr = new TableCell();
               tcr.Text = mydr["title"].ToString();
               tcr.BorderWidth = 1;
               trr.Cells.Add(tcr);
               mytb.Rows.Add(trr);      
  ////////////////////////////////////////////////增加一个空格里面放置dropdownlist
               TableCell tcd = new TableCell();
               tcd.BorderWidth = 1;
               trr.Cells.Add(tcd);
               string str = "";
               if (tcr.Text!= str)//如果三级标题不为空的话执行加载dropdownlist
               {
                   DropDownList ddl = new DropDownList();
                   Session[k.ToString()] = mydr["ID"].ToString();//把三级目录的id出入SESSION里面
                   ddl.ID = Session[k.ToString()].ToString();//对应的ddl的id号码为三级目录的id
                   k++;
                   Label1.Text += "id为:" +ddl.ID.ToString();//输出对应的ddl的id;
                   //Label1.Text += Session[k.ToString()].ToString();
                   ddl.Items.Add(new ListItem("1"));
                   ddl.Items.Add(new ListItem("2"));
                   ddl.Items.Add(new ListItem("3"));
                   ddl.Items.Add(new ListItem("4"));
                   ddl.Items.Add(new ListItem("5"));
                   ddl.Items.Add(new ListItem("6"));
                   ddl.Items.Add(new ListItem("7"));
                   ddl.Items.Add(new ListItem("8"));
                   ddl.Items.Add(new ListItem("9"));
                   ddl.Items.Add(new ListItem("10"));
                   tcd.Controls.Add(ddl );//加载ddl
               }
              
 
           }
           mydr.Close();
           PlaceHolder1.Controls.Add(mytb);//加载table  mytb;
       }
       con.Close();//关闭连接
       Session["count"] = k;//ddl的个数
       Label1.Text += "一共有" + Session["count"] + "个记录";
       
        } /// <summary>
 /// //////////////////////////////////////////////////////////////
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 
    protected void Button1_Click(object sender, EventArgs e)
    {   
        Int16 i = 0;//循环变量
        string type_id = GridView1.SelectedValue.ToString();
        //string stu_id = Session["studentID"].ToString();
        string tea_id = GridView1.SelectedRow.Cells[1].ToString();
        DateTime time = DateTime.Today;
        Label1.Text = "";
        Response.Write("一级目录id"+type_id);
        for (; i <Convert.ToInt16(Session["count"]); i++) {
            
            Label1.Text += "所选的id为:"+Session[i.ToString()];
            string id = Session[i].ToString();
            DropDownList d=PlaceHolder1.FindControl(id) as DropDownList;
            Response.Write("呵呵"+id);
            Response.Write(d.SelectedItem.ToString());            if (d != null)
            {
                Response.Write("true");
            }
            else {                Response.Write("false");
            }
        }
       
    }
明明创建了dropdownlist控件,为什么提示说:未将对象引用设置到对象的实例,why???

解决方案 »

  1.   

    代码太多,没有看完。hoho
    参照
    http://xucanzhao.cnblogs.com/archive/2006/04/29/388514.html
    http://xucanzhao.cnblogs.com/archive/2006/04/29/388517.html
    hope useful!
      

  2.   

    while (mydr.Read()) {
    ......
    PlaceHolder1.Controls.Add(mytb);//加载table  mytb;
    }
    如果没有记录的情况下程序还能添加 DropDownList吗?而这个
    protected void Button1_Click(object sender, EventArgs e){}
    是不管你添加不添加它都要找,假设在没有记录的情况下,这个事件肯定要出除的,C#是类型安全的,你应该查找的时候判断下
      

  3.   

    检查aspx页中的控件是不是添加了runat="server"属性。