我对递归的东西用得不是很多,论坛中也有关于这个控件的初始化的说法。我参详了一下,后来自己也写了一下。大家给我指点指点!谢谢了!
/// <summary>
/// 初始化TreeView 控件,遍历数据表中的数据并结合到树节点中,根节点已经手动预先定义好了。
/// </summary>
/// <param name="tv">treeview控件</param>
/// <param name="nrootid">父节点,第一次进入时指向的是根节点</param>
/// <param name="strnamefield">SQL 中指向代表显示名称的字段 </param>
/// <param name="strparentidfield">SQL中指向父节点的字段</param>
/// <param name="strtabname">SQL 指向的数据表的名称</param>
/// <param name="strvlauefiled">SQL中指向代表对应值的字段</param>
public void InitTreeView(System.Windows.Forms.TreeView tv, int nrootid, string strtabname, string strvlauefiled,
string strnamefield, string strparentidfield)
{
tv.Nodes[0].Nodes.Clear();
//传递到递归函数中的是 当前树的根节点。添加从第2层开始。
InitTreeViewData(tv.TopNode.Nodes, nrootid, strtabname, strvlauefiled, strnamefield, strparentidfield);
}
private void InitTreeViewData(System.Windows.Forms.TreeNodeCollection nodes, int nparentid, string strtabname, string strvlauefiled,
string strnamefield, string strparentidfield)
{
System.Windows.Forms.TreeNode tn = new System.Windows.Forms.TreeNode();
DataSet ds = new DataSet();
string strsql = "select " + strvlauefiled + "," + strnamefield + " from " + strtabname + " where " + strparentidfield + " = " + nparentid.ToString();
ds = GetDataSetBySql(strsql);
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
tn = new System.Windows.Forms.TreeNode();
int nodeid = int.Parse(ds.Tables[0].Rows[i][strvlauefiled].ToString());
tn.Tag = nodeid;
tn.Text = ds.Tables[0].Rows[i][strnamefield].ToString();
nodes.Add(tn);
InitTreeViewData(tn.Nodes, nodeid, strtabname, strvlauefiled, strnamefield, strparentidfield);
}
}