protected void diguishu(string Pid, DataTable dt, TreeNode tn) //递归数
{
DataView dv = dt.DefaultView;
dv.RowFilter = "ParentId = '" + Pid + "'";
for (int i = 0; i < dv.Count; i++)
{
TreeNode ctr = new TreeNode(dv[i]["Text"].ToString(), dv[i]["Id"].ToString());
tn.ChildNodes.Add(ctr);
diguishu(dv[i]["Id"].ToString(), dt, ctr);
}
} protected void createTree() //生成树
{
TreeNode tn = new TreeNode("所有类型", Guid.Empty.ToString());
TreeView1.Nodes.Add(tn);
DataTable dt = FPD.B2C.BLL.GetAllCategory().Select(c => new { Id = c.CategoryId, ParentId = c.ParentId, Text = c.CategoryName }).AsEnumerable().ToTable();
diguishu(tn.Value, dt, tn);
}他只找完所有类型的第一个子接点然后就结束拉.不是应该找完第一个然后再继续找下去吗?
请大家指教
解决方案 »
- 求助最简单的delete语句
- 我得vs2008,设计页面打不开,一点vs就死了,动不了,不知道是什么原因
- 向串口发送十六进制数据???在线等
- checkedListBox怎样邦定隐藏值
- 一个web站点 所有页面都要判断是否登陆,没有登陆则跳转到登陆界面,一般怎么做?
- c# SplitContainer 拆分器panel1和panel2位置问题
- OleDbConnection中对excel的访问权限?
- 用Dataset的Relations关联两个表时,怎样更新这两个表的记录?
- How to make mysql execute one sql file in the C# program.
- 请问这个问题怎么解决啊???
- WinForm程序,客户端如何从服务器下载文件?
- 关于流stream读取doc文件乱码问题
diguishu(dv[i]["Id"].ToString(), dt, ctr);
上边应该有个判断吧 如果这个id下边还有子类类似这样的判断再将
diguishu(“子类ID”, 子类数据, ctr);
protected void diguishu(string Pid, DataTable dt, TreeNode tn) //递归数
{
DataView dv = dt.DefaultView;
dv.RowFilter = "ParentId = '" + Pid + "'";
for (int i = 0; i < dv.Count; i++)
{
TreeNode ctr = new TreeNode(dv[i]["Text"].ToString(), dv[i]["Id"].ToString());
tn.ChildNodes.Add(ctr);
diguishu(dv[i]["Id"].ToString(), dt, tn);//ctr -> tn
}
}
断点时,第一次运行,dv.count=9,第二次运行:递归第一个大类的时候,dv.count = 1,之后的dv.count = 0,应该说dv.count=0继续两次.然后就结束递归拉.
他不是应该在dv.count = 9那个递归运行 i = 1,也就是第二大类的递归吗?
请指教.
dv都没这个属性.看来你也看出问题 所在..
是不是按这种方法不能实现递归?
protected void diguishu(string Pid, DataTable dt, TreeNode tn) //递归数
{
DataRow[] drs = dt.Select("ParentId = '" + Pid + "'");
for (int i = 0; i < drs.Length; i++)
{
TreeNode ctr = new TreeNode(drs[i]["Text"].ToString());
ctr.Tag = drs[i]["Id"].ToString();
tn.Nodes.Add(ctr);
diguishu(drs[i]["Id"].ToString(), dt, ctr);
}
}
这样就好了。
{
treeView1.Nodes.Clear();
createTree();
treeView1.ExpandAll();
} private DataTable getTreeData()
{
DataTable dt = new DataTable();
dt.Columns.Add("Id");
dt.Columns.Add("ParentId");
dt.Columns.Add("Text"); DataRow row; for (int i = 0; i < 5; i++)
{
row = dt.NewRow();
row[0] = i;
row[1] = -1;
row[2] = string.Format("Category-{0}", i + 1); dt.Rows.Add(row);
} for (int i = 0; i < 10; i++)
{
row = dt.NewRow();
row[0] = 10 + i;
row[1] = i % 5;
row[2] = string.Format("Middle-Category-{0}", i + 1); dt.Rows.Add(row);
} for (int i = 0; i < 30; i++)
{
row = dt.NewRow();
row[0] = 20 + i % 5;
row[1] = 10 + i % 5;
row[2] = string.Format("Small-Category-{0}", i + 1); dt.Rows.Add(row);
} return dt;
} protected void createTree() //生成树
{
TreeNode tn = new TreeNode("所有类型");
tn.Tag = -1;
treeView1.Nodes.Add(tn);
DataTable dt = getTreeData();
diguishu(tn.Tag.ToString(), dt, tn);
}
protected void diguishu(string Pid, DataTable dt, TreeNode tn) //递归数
{
DataRow[] drs = dt.Select("ParentId = '" + Pid + "'");
for (int i = 0; i < drs.Length; i++)
{
TreeNode ctr = new TreeNode(drs[i]["Text"].ToString());
ctr.Tag = drs[i]["Id"].ToString();
tn.Nodes.Add(ctr);
diguishu(drs[i]["Id"].ToString(), dt, ctr);
}
}
Dim cParent As String, DepaId As String
Dim _node As TreeNode Me.FlatTreeView1.Nodes.Clear()
Me.FlatTreeView1.BeginUpdate()
Try
'填充树型控件
'最顶层
m_TopNode = New TreeNode("部门分类")
m_TopNode.Tag = "SccpcDepaID"
Me.FlatTreeView1.Nodes.Add(m_TopNode) Dim i As Integer
For i = 0 To Me.MyToolbar.DT.Rows.Count - 1
cParent = Me.MyToolbar.DT.Rows(i).Item("cParent") & "" '上级部门编号
DepaId = Me.MyToolbar.DT.Rows(i).Item("cbmdh") & "" ' 部门编号
If cParent.Equals("") Then
_node = New TreeNode(Me.MyToolbar.DT.Rows(i).Item("cbmmc").ToString.Trim & "")
_node.Tag = DepaId
_node = FillTree(_node, DepaId)
If _node.GetNodeCount(True) > 0 Then
_node.ImageIndex = 0
Else
_node.ImageIndex = 1
End If
_node.SelectedImageIndex = _node.ImageIndex
m_TopNode.Nodes.Add(_node)
End If
Next
If Not Me.FlatTreeView1.SelectedNode Is Nothing Then
Me.FlatTreeView1.SelectedNode.EnsureVisible()
End If Catch ex As Exception
MessageBox.Show(ex.Message, CType(SR.GetString("ERROR_LOC"), String), MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
'撤消编辑
Me.MyToolbar.DT.RejectChanges()
Me.FlatTreeView1.EndUpdate()
m_TopNode.Expand()
End Try
End Sub Private Function FillTree(ByVal _node As TreeNode, ByVal sParentID As String) As TreeNode
Dim i As Integer
Dim _node1 As TreeNode
Dim cParent As String, DepaID As String Try
For i = 0 To Me.MyToolbar.DT.Rows.Count - 1
cParent = Me.MyToolbar.DT.Rows(i).Item("cParent") & "" '上级部门编号
DepaID = Me.MyToolbar.DT.Rows(i).Item("cbmdh") & "" ' 部门编号 If Not cParent.Equals("") AndAlso Not Me.MyToolbar.DT.Rows(i).RowState = DataRowState.Modified Then
If cParent.Equals(sParentID) Then
_node1 = New TreeNode(Me.MyToolbar.DT.Rows(i).Item("cbmmc").ToString.Trim & "")
_node1.Tag = DepaID
Me.MyToolbar.DT.Rows(i).BeginEdit()
Me.MyToolbar.DT.Rows(i).Item("cbmmc") = Me.MyToolbar.DT.Rows(i).Item("cbmmc").ToString.Trim & ""
Me.MyToolbar.DT.Rows(i).EndEdit()
_node1 = FillTree(_node1, DepaID)
If _node1.GetNodeCount(True) > 0 Then
_node1.ImageIndex = 0
Else
_node1.ImageIndex = 1
End If
_node1.SelectedImageIndex = _node1.ImageIndex _node.Nodes.Add(_node1)
End If
End If
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
Return _node
End Function
{
DataView dv = dt.DefaultView;
dv.RowFilter = "ParentId = '" + Pid + "'";
for (int i = 0; i < dv.Count; i++)
{
TreeNode ctr = new TreeNode(dv[i]["Text"].ToString(), dv[i]["Id"].ToString());
tn.ChildNodes.Add(ctr);
diguishu(dv[i]["Id"].ToString(), dt, tn);//ctr -> tn
}
}