/*
我個人認(rèn)為問題出在 dataTable.DefaultView中,這個DefaultView我感覺好像是單例模式的
因為,在調(diào)用private void AddChildNode(DataTable dt, TreeNode node){...}時,dataTable.DefaultView被改變了,
所以要先添加根結(jié)點,然后根據(jù)每一個根結(jié)點添加子節(jié)點就可以了
*/
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
DataTable dt = GoodsCategoryDAL.GetAllGoods2();//從數(shù)據(jù)庫里取出數(shù)據(jù)
this.treeView.Nodes.Clear();
DataView dv = dt.DefaultView;
dv.RowFilter = "parentId=0";
//加入根結(jié)點
foreach (DataRowView drv in dv)
{
TreeNode root = new TreeNode(drv.Row["className"].ToString(), drv.Row["classId"].ToString());
this.treeView.Nodes.Add(root);
}
//根據(jù)每一個根結(jié)點加入對應(yīng)的子節(jié)點
for (int i = 0; i < this.treeView.Nodes.Count; i++)
{
this.AddChildNode(dt, this.treeView.Nodes[i]);
}
}
}
//添加子節(jié)點
private void AddChildNode(DataTable dt, TreeNode node)
{
DataView dv = dt.DefaultView;
dv.RowFilter = "parentId=" + node.Value.Trim();
foreach (DataRowView drv in dv)
{
TreeNode childNode = new TreeNode(drv.Row["className"].ToString(), drv.Row["classId"].ToString());
node.ChildNodes.Add(childNode);
}
}
我個人建議不要用DataTable,DataSet之類的集合作在前臺中使用,因為這樣不能體現(xiàn)出面向?qū)ο蟮乃枷?/p>
你可以用List<T>
*/
protected void Page_Load(object sender, EventArgs e)
{
List<GoodsClassModel> gcmlist = GoodsCategoryDAL.GetAllGoods1();//獲取數(shù)據(jù)
//循環(huán)所有數(shù)據(jù)
foreach (GoodsClassModel gcm in gcmlist)
{
//如果parentId=0是根結(jié)點
if (gcm.ParentId == 0)
{
TreeNode root = new TreeNode(gcm.ClassName, gcm.ClassId.ToString());
this.treeView.Nodes.Add(root);
//添加子節(jié)點
this.AddChildNode(root, gcmlist);
}
}
}
/// <summary>
/// 添加子節(jié)點
/// </summary>
/// <param name="node"></param>
/// <param name="gcmlist"></param>
private void AddChildNode(TreeNode node, List<GoodsClassModel> gcmlist)
{
foreach (GoodsClassModel gcm in gcmlist)
{
if (gcm.ParentId == Convert.ToInt32(node.Value))
{
TreeNode childNode = new TreeNode(gcm.ClassName, gcm.ClassId.ToString());
node.ChildNodes.Add(childNode);
//添加子節(jié)點
this.AddChildNode(childNode, gcmlist);
}
}
}