关于combobox如何递归显示树效果
http://community.csdn.net/Expert/topic/5229/5229675.xml?temp=.3458063
bm数据表结构:
ID Name PID
首先先了解一下,树的种类:
一.只用空格,或者其他相同的符号显示简单树结构,如:
文科
语文
作文
阅读
英语
口语
书面语
理科
物理
化学
综合科
二.用不同符号,显示树结构,并且用空格使得子节点向右移一格.如:
文科
┣语文
┗英语
理科
┣物理
┗数学
三.用不同符号,显示树结构,并且判断是否有下一级同等级的节点,如有的话,用"┃
"连接.如:
文科
┃┣语文
┃┃┣阅读
┃┃┗作文
┃┗英语
理科
┗物理
┗数学
四.用不同符号,显示树结构,并且判断是否有下一级节点,如有,前面显示"+",如没
有,前面显示"-",再判断是否有下一级同等级的节点,如有的话,用"┃"连接.如:
+文科
┃┣+语文
┃┃ ┣-阅读
┃┃ ┗-作文
┃┗-英语
+理科
┣-物理
┗-数学
下面是四种的实现方法:
第一种:第一种是最简单的,下面先来实现第一种效果,其他的随后慢慢补上
//首先创建datatable
public DataView drv(string query)
{
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\xcrs.mdb";
conn.Open();
OleDbDataAdapter adp = new OleDbDataAdapter(query, conn);
DataSet ds = new DataSet();
adp.Fill(ds, "bm");
return ds.Tables["bm"].DefaultView;
conn.Close();
conn.Dispose();
}
//接下是通过数据表递归加载
/// <summary>
/// 递归显示-treeview效果模仿
/// 调用方法:
/// dv = drv("select * from bm");
/// dv.Sort = "PID ASC";
/// CreateTree(treeview控件ID,Dataview)
/// </summary>
/// <param name="trvDBBinding">需要绑定的treeview控件名称</param>
/// <returns>结果</returns>
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, " ");
}
}
/// <summary>
/// 递归显示-其他控件treeview效果模仿
/// 树连接数据库------子节点
/// </summary>
/// <param name="tnParent">父ID</param>
/// <returns>结果</returns>
public void CreateComboboxTreeNode(ComboBox trvDBBinding,ref int tnParent, DataView dv,string strfill)
{
DataRowView[] arrDRV = dv.FindRows(tnParent);//Get children data info
int tnNew;
foreach (DataRowView dr in arrDRV)
{
trvDBBinding.Items.Add(strfill + dr["Name"].ToString());
tnNew = Convert.ToInt32(dr["ID"]);
CreateComboboxTreeNode(trvDBBinding, ref tnNew, dv, strfill + " ");
}
}
调用方法:
在form_load 事件中写:
DataView dv = drv("select * from bm");
dv.Sort = "PID ASC"; //pai xu
CreateComboboxTree(this.comboBox1, dv);