我的数据表是gx表,里面就两列数据,fth(父图号)和zth(子图号),例如 
fth        zth 
中国      浙江 
中国      湖北 
浙江      杭州 
浙江      宁波 
杭州      余杭 
杭州      萧山 
······ web程序中有个textbox1和treeview1,在textbox1中输入父图号值,点button,treeview中就会显示相应内容。例如在textbox1中输入“浙江”,treeview1就会显示“ 
    浙江 
        杭州 
          余杭 
          萧山 
        宁波 
这当然只是个例子,我照高手们的意见写完了下面的代码,但是运行的时候却看不到treeview1,请问下是怎么回事?并且
1)静态的treeview运行时是可以显示的; 
2)数据库里有fth='HW69090701'的数据存在; 
3)用代码添加一个节点是显示的; 
但是运行时点BUTTON1却看不到任何数据,请各位大虾帮帮忙
代码如下:
 protected void Button1_Click(object sender, EventArgs e)
    {
        TreeView1.Nodes.Clear();    
        TreeView1.Visible = true;
        SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnString1"]);
        string sqlname = "SELECT FTH,ZTH from gx";
        SqlCommand cmd = new SqlCommand(sqlname, cn);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds, "gx");
        DataTable dt = ds.Tables[0];        foreach (DataRow dr in dt.Rows)
        {
            if (dr["FTH"].ToString() == "HW69090701")
            {
                TreeNode newNode = new TreeNode(dr["ZTH"].ToString());
                TreeView1.Nodes.Add(newNode);
                ChildLoad(dr, newNode, dt);
            }
        }        this.TreeView1.ExpandAll();
    }
    protected void Page_Load(object sender, EventArgs e)
    {
    }    private void ChildLoad(DataRow dr, TreeNode newNode, DataTable dt)
    {
        foreach (DataRow row in dt.Rows)
        {            if (dr["ZTH"].ToString() == row["FTH"].ToString())
            {
                TreeNode childNode = new TreeNode();
                childNode.Text = row["ZTH"].ToString();
                newNode.ChildNodes.Add(childNode);
                ChildLoad(row, childNode, dt);              }
        }
    }

解决方案 »

  1.   

    ChildLoad改为下面:
    private void ChildLoad(string p_FTH, TreeNode newNode, DataTable dt) 
        { 
            foreach (DataRow row in dt.Rows) 
            {             if (p_FTH.ToUpper() == row["FTH"].ToString().ToUpper()) 
                { 
                    TreeNode childNode = new TreeNode(); 
                    childNode.Text = row["ZTH"].ToString(); 
                    newNode.ChildNodes.Add(childNode); 
                    ChildLoad(row["ZTH"].ToString(), childNode, dt);              
                } 
            } 
        } 上面一段语名:
    foreach (DataRow dr in dt.Rows) 
            { 
                if (dr["FTH"].ToString().ToUpper() == "HW69090701".ToUpper()) 
                { 
                    TreeNode newNode = new TreeNode(dr["FTH"].ToString()); 
                    TreeView1.Nodes.Add(newNode); 
                    ChildLoad(dr["ZTH"].ToString(), newNode, dt); 
                } 
            } 
      

  2.   

    1楼,按照你的方法运行时 ChildLoad(dr["ZTH"].ToString(), newNode, dt);
    编译器错误消息: CS1502: 与“cpthscjgs.ChildLoad(System.Data.DataRow, System.Web.UI.WebControls.TreeNode, System.Data.DataTable)”最匹配的重载方法具有一些无效参数
      

  3.   

    樓主你好,還沒搞定嗎?foreach (DataRow dr in dt.Rows) 
      { 
          if (dr["FTH"].ToString() == "HW69090701") 
          { 
             TreeNode newNode = new TreeNode(dr["ZTH"].ToString()); 
             TreeView1.Nodes.Add(newNode); 
             //ChildLoad(dr, newNode, dt);把這句注釋掉,先不要遞歸,看有沒有第一層父節點綁定
          } 
      } 
      

  4.   

    樓主要兩個地方都修改一下。不光是修改ChildLoad過程。
    在上面加載父節點時,那句也得修改一下,然後調用時,我改了一下參數類型。
      

  5.   

    5楼//ChildLoad(dr, newNode, dt);把這句注釋掉,先不要遞歸,看有沒有第一層父節點綁定 两个地方都注释掉了,没有内容啊