private void BindTreeView(TreeNodeCollection tdc,string father_id,Config aConfig)
{
TreeNode node;
str_sql="select FD_ID,FD_Name from T_Z01_FilDir where FD_Father="+father_id;
int iRow=aConfig.GetRowCount(str_sql);
for(int i=0;i<iRow;i++)
{
node=new TreeNode();
node.SelectedImageUrl=".\\images\\open.gif";
node.ImageUrl=".\\images\\dot.gif";
node.ID=aConfig.ds.Tables[0].Rows[i][0].ToString();
node.Text=aConfig.ds.Tables[0].Rows[i][1].ToString();
node.Expanded=true;
tdc.Add(node);
BindTreeView(node.Nodes,aConfig.ds.Tables[0].Rows[i][0].ToString(),aConfig);
str_sql="select FD_ID,FD_Name from T_Z01_FilDir where FD_Father="+father_id;
aConfig.Fill(str_sql);
}
aConfig.Close();
}
{
TreeNode node;
str_sql="select FD_ID,FD_Name from T_Z01_FilDir where FD_Father="+father_id;
int iRow=aConfig.GetRowCount(str_sql);
for(int i=0;i<iRow;i++)
{
node=new TreeNode();
node.SelectedImageUrl=".\\images\\open.gif";
node.ImageUrl=".\\images\\dot.gif";
node.ID=aConfig.ds.Tables[0].Rows[i][0].ToString();
node.Text=aConfig.ds.Tables[0].Rows[i][1].ToString();
node.Expanded=true;
tdc.Add(node);
BindTreeView(node.Nodes,aConfig.ds.Tables[0].Rows[i][0].ToString(),aConfig);
str_sql="select FD_ID,FD_Name from T_Z01_FilDir where FD_Father="+father_id;
aConfig.Fill(str_sql);
}
aConfig.Close();
}
struct data1
{
public int id;
public int m_id;//可以不要
public string t_id;//可以不要
};........
private void button1_Click_1(object sender, System.EventArgs e)
{
mycnn=new OleDbConnection(@"Provider=MicroSoft.Jet.OLEDB.4.0;Data Source=f:\dazhu2.mdb");mycnn.Open();
if(mycnn.State==System.Data.ConnectionState.Open)
{MessageBox.Show(" 数据库连接成功 !");
OleDbDataAdapter mya=new OleDbDataAdapter("select * from t1 order by m_id,t_id,[order]",mycnn);
DataSet mydataset=new DataSet();
mya.Fill(mydataset,"one");//填充数据DataTable mytable=mydataset.Tables[0];
//向TREEVIEW 中填充数据
TreeNode newnode=null;
foreach(DataRow r in mytable.Rows)
{
data1 mydata;
newnode=new TreeNode();
newnode.Text=r[4].ToString();
mydata.id=int.Parse(r[0].ToString());
mydata.m_id=int.Parse(r[1].ToString());
mydata.t_id=r[2].ToString();newnode.Tag=(object)mydata;if(int.Parse(r[1].ToString())==1)
{
this.treeView1.Nodes.Add(newnode);
}
else
{
TreeNode node1=null;
int i=int.Parse(r[2].ToString());
foreach(TreeNode nd in this.treeView1.Nodes)
{
node1=find_node(nd,i);
if(node1!=null)
{
this.treeView1.SelectedNode=node1;
this.treeView1.Focus();
//add node
this.treeView1.SelectedNode.Nodes.Add(newnode);
break;}}
if(node1==null)
{
MessageBox.Show("未找到相应的结点");
}
}}}
else
MessageBox.Show(" 数据库连接失败 !");
} //递归的方法
private TreeNode find_node(TreeNode a,int b)
{
TreeNode findnode=null;
object o=a.Tag;
data1 mydata=(data1)o;
string m=mydata.id.ToString();
string n=b.ToString();if(m==n)
{
findnode=a;
}
else
{
foreach(TreeNode nd in a.Nodes)
{
findnode=find_node(nd,b);
if(findnode!=null)
{
break;
}
}}
return findnode;
}
下面是代码
private void BindTreeView(TreeNodeCollection Nodes,string StrSql,SqlConnection objcon)
{
TreeNode objNode;
objAdapter = new SqlDataAdapter(StrSql.Trim(),objcon);
DataSet objds = new DataSet();
try
{
objAdapter.Fill(objds,"archive_ctg");
int nCount = objds.Tables["archive_ctg"].Rows.Count;
if(nCount != 0)
{
for(int i = 0 ; i < nCount ; i++)
{
DataRow objCRow = objds.Tables["archive_ctg"].Rows[i];
if(objAy.IndexOf(objCRow["archive_ctg_no"].ToString().Trim(),0) == -1)
{
objNode = new TreeNode();
objNode.Tag = objCRow["archive_ctg_no"].ToString().Trim();
objNode.Text = objCRow["archive_name"].ToString().Trim();
Nodes.Add(objNode);
string StrSqlChild = "Select * From Archive_ctg Where parent_no = '" + objCRow["archive_ctg_no"].ToString().Trim() + "'";
objAy.Add(objCRow["archive_ctg_no"].ToString().Trim());
//递归
BindTreeView(objNode.Nodes,StrSqlChild.Trim(),objcon);
}
}
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.Trim(),"信息",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
用来记录每个节点的ID,一避免重复添加已经加过的节点