背景:vs2008+c#
test.dbf结构如下:
镇         村          社      姓名
成就镇     梅花村      一社    张三
成就镇     梅花村      一社    李四
成就镇     梅花村      二社    李四
中山镇     茶树村      一社    王五
中山镇     茶树村      二社    李四
中山镇     茶树村      二社    钱八问题:现在想把test.dbf 的数据按 镇-村-社-姓名  这样四级的树型结构装入到 TreeView控件中,这应该怎样写代码吗?请前辈指点!
小弟先感谢了!

解决方案 »

  1.   

    DataTable dt = new DataTable();
                dt.Columns.Add("镇");
                dt.Columns.Add("村");
                dt.Columns.Add("社");
                dt.Columns.Add("姓名");            DataRow row = dt.NewRow();
                row["镇"] = "成就镇";
                row["村"] = "梅花村";
                row["社"] = "一社";
                row["姓名"] = "张三 ";            dt.Rows.Add(row);            foreach (DataRow dr in dt.Rows)
                {
                    TreeNode node = new TreeNode();
                    node.Text = dr["镇"].ToString();
                    TreeNode node1 = new TreeNode();
                    node1.Text = row["村"].ToString();
                                  TreeNode node2 = new TreeNode();
                    node2.Text = row["社"].ToString();                TreeNode node3 = new TreeNode();
                    node3.Text = row["姓名"].ToString();
                    node2.Nodes.Add(node3);
                    node1.Nodes.Add(node2);
                    node.Nodes.Add(node1);                this.treeView1.Nodes.Add(node);
                }
      

  2.   

    类似如下的 TreeView结构:成就镇
            梅花村
                    一社
                          张三
                          李四
                    二社  李四
    中山镇  
           茶树村  
                    一社
                          王五.
    .
    .
    .
    .
      

  3.   

    现在大部分C#连接数据库都会是sql server 。但对一些旧的数据库文件的连接和操作就不太熟了。
          今天就有这个问题,要对FOXPRO生成的DBF文件数据库进行操作。
          我在CSDN上查了很久,大部分有问题都没很好地回复到这些操作上的问题。
          经过我的实验,用ODBC来连接它就可以了。
          下面是所用的代码。
          都很简单,就是格式上要注意。和用开的查询语句会有很大不同。
    protected void Page_Load(object sender, EventArgs e)
        {
            System.Data.Odbc.OdbcConnection conn = new System.Data.Odbc.OdbcConnection();
            string table = @"D:\aaa\code.dbf";
            string connStr=@"Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" + table + ";Exclusive=No;NULL=NO;Collate=Machine;BACKGROUNDFETCH=NO;DELETED=NO"; 
            conn.ConnectionString = connStr;
            conn.Open();
                    OdbcCommand cmd = new OdbcCommand();
            cmd.Connection = conn;
            string sql = "update " + table + " set other='2',rate=1.014 ";
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.Text;
            cmd.ExecuteNonQuery();         sql = @"select * from " + table;
            OdbcDataAdapter da = new OdbcDataAdapter(sql,conn);
            DataTable dt = new DataTable();
            da.Fill(dt);
            this.GridView1.DataSource = dt.DefaultView;
            this.GridView1.DataBind();    }
    注意点:1 连接串的格式。2 所对应的表名必须要有路径。http://www.cnblogs.com/tanjy/archive/2006/11/14/560046.html
    http://www.xjcncn.com/school/programme/net/200705/739.html
      

  4.   

        Common com = new Common();   //自定义链接类
        protected void Page_Load(object sender, EventArgs e)
        {                string sql = "select DISTINCT 镇 from test";        SqlDataReader sqldr = com.showreader(sql);        while (sqldr.Read())
            {            TreeNode tn = new TreeNode();            tn.Text = sqldr["镇"].ToString();            tn.Value = sqldr["镇"].ToString();                     TreeView1.Nodes.Add(tn);            addchildnodes(tn);
            }        
        }
        protected void addchildnodes(TreeNode tn)
        {        string sql = "select  DISTINCT 村 from test where 镇='" + tn.Text + "'";        SqlDataReader sqldr = com.showreader(sql);        while (sqldr.Read())
            {            TreeNode tn1 = new TreeNode();            tn1.Text = sqldr["村"].ToString();            tn1.Value = sqldr["村"].ToString();            tn.ChildNodes.Add(tn1);              addchildnodes1(tn1,tn.Text );
            }
        }
        protected void addchildnodes1(TreeNode tn,string ftn)
        {        string sql = "select DISTINCT 社 from test where 村='" + tn.Text + "' and 镇='"+ftn+"'";        SqlDataReader sqldr = com.showreader(sql);        while (sqldr.Read())
            {            TreeNode tn2 = new TreeNode();            tn2.Text = sqldr["社"].ToString();            tn2.Value = sqldr["社"].ToString();            tn.ChildNodes.Add(tn2);
                addchildnodes2(tn2,tn.Text );
        
            }
        }
        protected void addchildnodes2(TreeNode tn,string ftn)
        {        string sql = "select 姓名 from test where 社='" + tn.Text + "' and 村='"+ftn+"'";        SqlDataReader sqldr = com.showreader(sql);        while (sqldr.Read())
            {            TreeNode tn2 = new TreeNode();            tn2.Text = sqldr["姓名"].ToString();            tn2.Value = sqldr["姓名"].ToString();            tn.ChildNodes.Add(tn2);
                    }
        }
    }
    过程很烦锁感觉,有没高手有没更简洁的代码...新手的代码见笑了,不过达到楼主的要求,,呵呵
      

  5.   

    4楼的前辈 Common com = new Common();   //自定义链接类是什么意思啊?
      

  6.   

    就是我自己写的一个类,类叫Common 里面写了一些常用操作数据库的方法然后在窗体或ASPX.cs页面调用这个类,我对CS不是很熟悉。但B/S是这样做的...我不是前辈。 我也刚学这个不久