我搞了一天了,treeview问题,高手们睡了没有,进来看看!
原来我的数据库中的结构是这样的:
class表:
C_id ParentsId C_class
1 0 软件工程
2 0 网络编程
3 0 C#程序设计
4 1 第一章
5 1 第二章
6 2 第一章
7 2 第二章
8 2 第三章
9 3 第一章
10 3 第二章
用TreeView控件绑定 想使之效果为:第一级节点显示课程的名称 然后他们下面可以展开他们的章节,比如软件工程有 第一章 第二章 ;网络编程有 第一章 第二章 第三章 。上面这样的数据库结构配合下面的程序,可以实现这个效果。
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
string SqlConn=System.Configuration.ConfigurationSettings.AppSettings["ConnString"];
Conn=new SqlConnection(SqlConn);
CreateDataSet();
InitTree(this.TreeView1.Nodes,"0");
}
private DataSet CreateDataSet()
{
SqlStr="select * from class";
da=new SqlDataAdapter(SqlStr,Conn);
data=new DataSet();
da.Fill(data,"tree");
return data;
}
private void InitTree(TreeNodeCollection Nds,string parentId)
{
TreeNode tmpNd;
DataRow[] rows=data.Tables[0].Select("ParentId='"+parentId+"'");
foreach(DataRow row in rows)
{
tmpNd=new TreeNode();
tmpNd.ID=row["C_id"].ToString();
tmpNd.Text=row["C_class"].ToString();
tmpNd.NavigateUrl="index.aspx?class="+row["parentId"].ToString()+"&C_id="+row["C_id"].ToString();
Nds.Add(tmpNd);
InitTree(tmpNd.Nodes,tmpNd.ID);
}
}
这样做主要思想是,先从表里找出根节点的数据,然后生成TreeNode节点插入到TreeView中,然后用第归寻找当前节点的子节点,生成TreeNode并插入到TreeView中。这样做是可以的。
但我想从新设计一下数据库,让它更容易理解些。我想做成这样:
C_id NodeId C_class
1 第一章 软件工程
2 第二章 软件工程
3 第三章 软件工程
4 第一章 C#程序设计
5 第二章 C#程序设计
6 第三章 C#程序设计
7 第一章 网络编程
8 第二章 网络编程
现在想这样做数据库或者需要再加一些节点(比如ParentId),来达到同样的效果,也就是第一级级节点显示课程名称 然后他们有多少章节 就可以展开看到。
基本就是这样,我想了一天,高手们,帮我指点一下。我现在主要困惑的问题是,怎么样插入课程的章节到它所在的课程名称节点下!