关于combobox如何递归显示树效果 表有ID Name PID 三个字段如何在combobox中写递归显示如下效果文科 语文 作文 阅读 英语 口语 书面语理科 物理 化学综合科前面加空格代表子节点请大虾帮忙啊~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个控件就是在前面加入空格好了,记住当前在什么深度中。treeView更合适 下面是java 写的,参考一下VectorTree = BuildTree(VectorTree,v,"0",1) ;//BuildTree private Vector BuildTree(Vector VectorTree,Vector v,String ParentID,int nDepth){ int nCount=0; for(int i=0;i<v.size();i++) { HashMap hm=(HashMap)v.get(i); if(hm.get("PARENTGROUPID").equals(ParentID)) { nCount++; } } int nTempCount=0; for(int i=0;i<v.size();i++) { HashMap hm=(HashMap)v.get(i); if(hm.get("PARENTGROUPID").equals(ParentID)) { nTempCount++; HashMap temphm= new HashMap(); temphm.put("ID",(String)hm.get("ID")); String StrList =""; for(int j=0;j<nDepth-1;j++) StrList +="┃"; if(nTempCount!=nCount) StrList+="┣"; else StrList+="┗"; temphm.put("GROUPNAME",StrList+(String)hm.get("GROUPNAME")); VectorTree.add(temphm); VectorTree = BuildTree(VectorTree, v,(String)hm.get("ID"),nDepth+1); } } return VectorTree; } public void getClassName(string id, string strfill) { getConnString(); CmsDbApp cdb = new CmsDbApp(ConnString); bool myCheck = CmsDbBasic.SetConnection(connString); if (myCheck == false) { MessageBox.Show("数据库连接错误,请重新配置数据库连接"); } else { CmsDbBasic cmsDb = new CmsDbBasic(connString); DataTable dt = cdb.getDataTable(id, Convert.ToInt32(comboBox1.SelectedValue.ToString())); foreach (DataRow dr in dt.Rows) { //ListItem li = new ListItem(strfill+ dr["name"].ToString(),dr["map_id"].ToString()); //comboBox4.Items.Add(new ListItem(strfill+ dr["name"].ToString(),dr["map_id"].ToString())); comboBox4.Items.Add(strfill + dr["name"].ToString()); DataTable dt2 = cdb.getDataTable(dr["map_id"].ToString(), Convert.ToInt32(comboBox1.SelectedValue.ToString())); if (dt2.Rows.Count != 0) { getClassName(dr["map_id"].ToString(), strfill + "..."); } } } }我就是这样实现的 你主要看foreach那一部分就行. liuchao305() getConnString(); CmsDbApp cdb = new CmsDbApp(ConnString);是什么来? CmsDbBasic cmsDb = new CmsDbBasic(connString); 呢? combobox中加一个树比较好,这个以前我们实现了 getConnString(); CmsDbApp cdb = new CmsDbApp(ConnString);CmsDbBasic cmsDb = new CmsDbBasic(connString); 呢?哈哈这些都是我自己写的类第一个获得连接字符换。第二个数据库操作类。第三个数据库基类。这些都是些数据库的操作,这些你不用去管它。你主要看怎么给combobox添加树的方法.主要是在foreach里面实现了递归. 我根据大家的意见改了一个: public void CreateComboboxTree(ComboBox trvDBBinding, DataView dv) { DataRowView[] arrDRV = dv.FindRows(0);//Get root data info int tnNew; if (arrDRV.Length == 0) return; foreach (DataRowView dr in arrDRV) { trvDBBinding.Items.Add(dr["Name"].ToString()); tnNew=Convert.ToInt32(dr["ID"]); CreateComboboxTreeNode(trvDBBinding, ref tnNew, dv); } } public void CreateComboboxTreeNode(ComboBox trvDBBinding,ref int tnParent, DataView dv) { DataRowView[] arrDRV = dv.FindRows(tnParent);//Get children data info int tnNew; foreach (DataRowView dr in arrDRV) { trvDBBinding.Items.Add("---" + dr["Name"].ToString()); tnNew = Convert.ToInt32(dr["ID"]); CreateComboboxTreeNode(trvDBBinding, ref tnNew, dv); } }但还不完善不能显示这种效果:文科┃┣语文┃┗英语理科 ┣物理 ┗数学 请问这种如何判断啊? 一个计数器的代码,,帮看看如何修改 呵呵 vs2005 安装部署中快捷方式的问题。 内容显示重复,到底样式哪里出了问题 急求:在C# web应用程序页面上如何弹出一个文件保存的对话框呀呀 怎样访问类中的数组? 关于VS2005下,使用vista语音API的问题 请问相当于客户端下拉框中Text和Value属性的服务器端DropDownList的相应属性? 三道面试题,你会 做吗? 急!急!急!! c#读取properties类型文件 [原创]C#留言簿(含源代码) 求个C#正则,如何匹配形如2006-12-04这样的日期字符串? .Net2005中 如何使用eWorld.UI.dll
VectorTree = BuildTree(VectorTree,v,"0",1) ;
//BuildTree
private Vector BuildTree(Vector VectorTree,Vector v,String ParentID,int nDepth){ int nCount=0;
for(int i=0;i<v.size();i++)
{
HashMap hm=(HashMap)v.get(i);
if(hm.get("PARENTGROUPID").equals(ParentID))
{
nCount++;
}
}
int nTempCount=0;
for(int i=0;i<v.size();i++)
{
HashMap hm=(HashMap)v.get(i);
if(hm.get("PARENTGROUPID").equals(ParentID))
{
nTempCount++;
HashMap temphm= new HashMap();
temphm.put("ID",(String)hm.get("ID"));
String StrList ="";
for(int j=0;j<nDepth-1;j++)
StrList +="┃";
if(nTempCount!=nCount)
StrList+="┣";
else
StrList+="┗"; temphm.put("GROUPNAME",StrList+(String)hm.get("GROUPNAME"));
VectorTree.add(temphm);
VectorTree = BuildTree(VectorTree, v,(String)hm.get("ID"),nDepth+1);
}
} return VectorTree;
}
{
getConnString();
CmsDbApp cdb = new CmsDbApp(ConnString);
bool myCheck = CmsDbBasic.SetConnection(connString);
if (myCheck == false)
{
MessageBox.Show("数据库连接错误,请重新配置数据库连接");
}
else
{
CmsDbBasic cmsDb = new CmsDbBasic(connString);
DataTable dt = cdb.getDataTable(id, Convert.ToInt32(comboBox1.SelectedValue.ToString()));
foreach (DataRow dr in dt.Rows)
{ //ListItem li = new ListItem(strfill+ dr["name"].ToString(),dr["map_id"].ToString());
//comboBox4.Items.Add(new ListItem(strfill+ dr["name"].ToString(),dr["map_id"].ToString()));
comboBox4.Items.Add(strfill + dr["name"].ToString());
DataTable dt2 = cdb.getDataTable(dr["map_id"].ToString(), Convert.ToInt32(comboBox1.SelectedValue.ToString()));
if (dt2.Rows.Count != 0)
{ getClassName(dr["map_id"].ToString(), strfill + "...");
}
}
}
}
我就是这样实现的
getConnString();
CmsDbApp cdb = new CmsDbApp(ConnString);是什么来?
CmsDbApp cdb = new CmsDbApp(ConnString);
CmsDbBasic cmsDb = new CmsDbBasic(connString); 呢?
哈哈这些都是我自己写的类第一个获得连接字符换。第二个数据库操作类。第三个数据库基类。这些都是些数据库的操作,这些你不用去管它。你主要看怎么给combobox添加树的方法.主要是在foreach里面实现了递归.
{
DataRowView[] arrDRV = dv.FindRows(0);//Get root data info
int tnNew;
if (arrDRV.Length == 0) return;
foreach (DataRowView dr in arrDRV)
{
trvDBBinding.Items.Add(dr["Name"].ToString());
tnNew=Convert.ToInt32(dr["ID"]);
CreateComboboxTreeNode(trvDBBinding, ref tnNew, dv);
}
}
public void CreateComboboxTreeNode(ComboBox trvDBBinding,ref int tnParent, DataView dv)
{
DataRowView[] arrDRV = dv.FindRows(tnParent);//Get children data info
int tnNew;
foreach (DataRowView dr in arrDRV)
{
trvDBBinding.Items.Add("---" + dr["Name"].ToString());
tnNew = Convert.ToInt32(dr["ID"]);
CreateComboboxTreeNode(trvDBBinding, ref tnNew, dv);
}
}但还不完善不能显示这种效果:
文科
┃┣语文
┃┗英语
理科
┣物理
┗数学
请问这种如何判断啊?