求一个树形的算法 拜谢了! 本帖最后由 fox_138025 于 2012-07-25 19:38:14 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 给你一段代码自己领悟 private ArrayList lstkey = new ArrayList(); private ArrayList lstparent = new ArrayList(); private ArrayList lsttext = new ArrayList(); public void Initial() { ArrayList lstmainkey = new ArrayList(); ArrayList lstmaintext = new ArrayList(); ArrayList lstchildkey = new ArrayList(); ArrayList lstchildparent = new ArrayList(); ArrayList lstchildtext = new ArrayList(); lstkey.Clear(); lstparent.Clear(); lsttext.Clear(); this.Nodes.Clear(); if (this.BindingSource != null) { DataView view = this.BindingSource.List as DataView; if (view == null) { return; } DataTable dt = view.ToTable(); if (dt == null) { return; } int nodecount = dt.Rows.Count; for (int i = 0; i < nodecount; i++) { lstkey.Add(dt.Rows[i][this.KeyField]); lstparent.Add(dt.Rows[i][this.ParentField]); lsttext.Add(dt.Rows[i][this.TextField]); } for (int i = 0; i < nodecount; i++) { if (lstkey[i].ToString() != lstparent[i].ToString()) { if (lstparent[i].ToString() == string.Empty) { lstmainkey.Add(lstkey[i]); lstmaintext.Add(lsttext[i]); } else { lstchildkey.Add(lstkey[i]); lstchildparent.Add(lstparent[i]); lstchildtext.Add(lsttext[i]); } } } int mainnodecount = lstmainkey.Count; TreeNode[] nodemain = new TreeNode[mainnodecount]; for (int i = 0; i < mainnodecount; i++) { nodemain[i] = new TreeNode(); nodemain[i].Text = lstmaintext[i].ToString(); nodemain[i].Name = lstmainkey[i].ToString(); this.Nodes.Add(nodemain[i]); } int childnodecount = lstchildkey.Count; TreeNode[] nodechild = new TreeNode[childnodecount]; for (int i = 0; i < childnodecount; i++) { nodechild[i] = new TreeNode(); nodechild[i].Text = lstchildtext[i].ToString(); nodechild[i].Name = lstchildkey[i].ToString(); } for (int i = 0; i < childnodecount; i++) { for (int j = 0; j < mainnodecount; j++) { if (lstchildparent[i].ToString() == lstmainkey[j].ToString()) { nodemain[j].Nodes.Add(nodechild[i]); } } for (int k = 0; k < childnodecount; k++) { if (lstchildparent[i].ToString() == lstchildkey[k].ToString()) { nodechild[k].Nodes.Add(nodechild[i]); } } } this.ExpandAll(); } } 看不太懂 我用 Silverlight开发 里面没有DataTable 这些东西 我写了个 ListSub(1)方法 用来取出每层数据实体 参数1是最上层的ID public static void ListSub(int id) { Team obj = TeamList().Where(u => u.ID == id).FirstOrDefault(); if (obj == null) { return; } else { List<Team> objs = TeamList().Where(u => u.Fid == obj.ID).ToList(); foreach (Team role in objs) { obj.Challengers.Add(role); // MessageBox.Show(obj.Name+"--"+role.Name); ListSub(role.ID); //每个子集递归 } } }但是如何修改代码能返回和 GetTournament()方法一样的实体呢? float long类型转换 求解 用foreach遍历一个IEnumerable接口,能够嵌套吗? 想做一个C#的英语单词学习系统,请教TTS和存储问题 windows application如何不让主窗口出现 名称定义的问题 如何获取DataGrid的header的width.height,top,left wcf TCP error code 10060 错误 但是WcfTestClient连接正常 winfrom小问题,请帮忙解答一下 寻找字符串函数。 修改网页信息的请求 学习C# WinForm遇到问题
private ArrayList lstparent = new ArrayList();
private ArrayList lsttext = new ArrayList();
public void Initial()
{
ArrayList lstmainkey = new ArrayList();
ArrayList lstmaintext = new ArrayList();
ArrayList lstchildkey = new ArrayList();
ArrayList lstchildparent = new ArrayList();
ArrayList lstchildtext = new ArrayList(); lstkey.Clear();
lstparent.Clear();
lsttext.Clear();
this.Nodes.Clear(); if (this.BindingSource != null)
{
DataView view = this.BindingSource.List as DataView;
if (view == null)
{
return;
}
DataTable dt = view.ToTable();
if (dt == null)
{
return;
}
int nodecount = dt.Rows.Count;
for (int i = 0; i < nodecount; i++)
{
lstkey.Add(dt.Rows[i][this.KeyField]);
lstparent.Add(dt.Rows[i][this.ParentField]);
lsttext.Add(dt.Rows[i][this.TextField]);
}
for (int i = 0; i < nodecount; i++)
{
if (lstkey[i].ToString() != lstparent[i].ToString())
{
if (lstparent[i].ToString() == string.Empty)
{
lstmainkey.Add(lstkey[i]);
lstmaintext.Add(lsttext[i]);
}
else
{
lstchildkey.Add(lstkey[i]);
lstchildparent.Add(lstparent[i]);
lstchildtext.Add(lsttext[i]);
}
}
}
int mainnodecount = lstmainkey.Count;
TreeNode[] nodemain = new TreeNode[mainnodecount]; for (int i = 0; i < mainnodecount; i++)
{
nodemain[i] = new TreeNode();
nodemain[i].Text = lstmaintext[i].ToString();
nodemain[i].Name = lstmainkey[i].ToString();
this.Nodes.Add(nodemain[i]);
} int childnodecount = lstchildkey.Count;
TreeNode[] nodechild = new TreeNode[childnodecount];
for (int i = 0; i < childnodecount; i++)
{
nodechild[i] = new TreeNode();
nodechild[i].Text = lstchildtext[i].ToString();
nodechild[i].Name = lstchildkey[i].ToString();
} for (int i = 0; i < childnodecount; i++)
{
for (int j = 0; j < mainnodecount; j++)
{
if (lstchildparent[i].ToString() == lstmainkey[j].ToString())
{
nodemain[j].Nodes.Add(nodechild[i]);
}
}
for (int k = 0; k < childnodecount; k++)
{
if (lstchildparent[i].ToString() == lstchildkey[k].ToString())
{
nodechild[k].Nodes.Add(nodechild[i]);
}
}
}
this.ExpandAll();
} }
我写了个 ListSub(1)方法 用来取出每层数据实体 参数1是最上层的ID
public static void ListSub(int id)
{
Team obj = TeamList().Where(u => u.ID == id).FirstOrDefault();
if (obj == null)
{
return;
}
else
{
List<Team> objs = TeamList().Where(u => u.Fid == obj.ID).ToList();
foreach (Team role in objs)
{
obj.Challengers.Add(role);
// MessageBox.Show(obj.Name+"--"+role.Name);
ListSub(role.ID); //每个子集递归
}
}
}
但是如何修改代码能返回和 GetTournament()方法一样的实体呢?