日期:2014-05-17  浏览次数:20449 次

急!!!!从数据库中读取数据,然后用for循环输出Js到前台页面形成一个类似树形结构的,但是为什么在第三级就只能有一条数据?
这是代码... 
private string InitFolder()
  {
  string _Html = "var rootNode = new TreeNode(0, \"root\");";

  DataSet ds = folderBLL.GetList(" status=1 ");

  if (ds != null)
  {
  DataTable dt = ds.Tables[0];
  for (int i = 0; i < dt.Rows.Count; i++)
  {
  if (dt.Rows[i]["parentFolderId"].ToString() == "-1")
  {
  _Html += string.Format("folder{0}=new TreeNode({0},'{1}');", dt.Rows[i]["folderid"].ToString(), dt.Rows[i]["folderName"].ToString());
  _Html += string.Format("rootNode.addSubNode(folder{0});", dt.Rows[i]["FolderId"].ToString());
  for (int j = 0; j < dt.Rows.Count; j++)
  {
  string tempParentId = dt.Rows[i]["folderId"].ToString();

  if (dt.Rows[j]["parentFolderId"].ToString() == tempParentId)
  {
  _Html += setSubFolder(tempParentId, dt.Rows[j]["folderid"].ToString(), dt.Rows[j]["folderName"].ToString());
  string temp2 = dt.Rows[j]["FolderId"].ToString();
  for (int k = 0; k < dt.Rows.Count; k++)
  {
  if (dt.Rows[k]["parentFolderId"].ToString() == temp2)
  {
  _Html += setSubFolder(temp2, dt.Rows[k]["folderid"].ToString(), dt.Rows[k]["folderName"].ToString());
  string temp3 = dt.Rows[k]["FolderId"].ToString();
  k = 0;
  continue;
  }
  }
  }
  }
  }
  }
  }
  return _Html;
  }






   
   



------解决方案--------------------
1、treeview控件、
2、绑定数据、多级菜单 肯定要选择递归了! 方便、实用
/// <summary>
/// 递归添加节点
/// </summary>
/// <param name="id"></param>
/// <param name="parentnode"></param>
private void AddNode(int id, TreeNode parentnode)
{
string sql = "select * from Subject";//sql 语句
DataTable table = DAL.DBHelper.GetTable(sql);//获取数据

DataView view = new DataView(table);//把表数据添加到自定义视图中

view.RowFilter = "ParentId=" + id;//设置视图查询条件

foreach (DataRowView row in view)//遍历视图中数据
{
TreeNode node = new TreeNode();//实例化树节点
node.Expanded = false;
node.Text = row[1].ToString();
node.Value = row[0].ToString();
int newid = Convert.ToInt32(row[0]);

if (parentnode != null)
{
//node.Expanded = false;
parentnode.ChildNodes.Add(node);
AddNode(newid, node);//递归查找节点