csdn上一高手的代码没找到原出处,不知道对你是否有用!
public class WebForm1 : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView TrvStuInfo;
private DataSet objDataSet = new DataSet();
protected System.Web.UI.WebControls.Table Table1;
private db DB=new db();
private void Page_Load(object sender, System.EventArgs e)
{
if (!this.IsPostBack)
{
DB.CreateDataSet("grade",objDataSet);
intiTreeGrade(TrvStuInfo.Nodes,0);
}
}
private void intiTreeGrade(TreeNodeCollection Nds , int parentId)
{
DataView dv=new DataView() ;
TreeNode tmpNd;
int strId;
dv.Table = objDataSet.Tables["TrvNodeGrade"];
foreach(DataRowView objRow in dv)
{
tmpNd=new TreeNode();
strId=(int)objRow["GradeId"];
tmpNd.ID=strId.ToString();
tmpNd.Text=objRow["GradeName"].ToString();
tmpNd.ExpandedImageUrl ="images/folderopen.gif";
tmpNd.ImageUrl="images/folder.gif" ;
tmpNd.NavigateUrl =objRow["GradeUrl"].ToString() ;
tmpNd.Target="main";
Nds.Add(tmpNd);
} foreach(TreeNode TN in TrvStuInfo.Nodes)
{
tmpNd=new TreeNode();
tmpNd.Text="Loading....";
TN.Nodes.Add(tmpNd);
}
}
private void intiTreeClass(TreeNodeCollection Nds ,int parentId)
{
DataView dv=new DataView() ;
TreeNode tmpNd;
dv.Table = objDataSet.Tables["TrvNodeClass"];
dv.RowFilter = "GradeNodeId='" + parentId.ToString() + "'";
foreach(DataRowView objRow in dv)
{
tmpNd=new TreeNode();
tmpNd.Text=objRow["ClassName"].ToString();
tmpNd.ExpandedImageUrl ="images/folderopen.gif";
tmpNd.ImageUrl="images/folder.gif" ;
Nds.Add(tmpNd);
tmpNd=new TreeNode();
tmpNd.Text="Loading....";
Nds[Nds.Count-1].Nodes.Add(tmpNd);
}
if (Nds.Count!=1)
{
Nds[0].Remove();
}
else
{
Nds[0].Remove();
tmpNd=new TreeNode();
tmpNd.Text="无数据";
Nds.Add(tmpNd);
}
} private void intiTreeStudent(TreeNodeCollection Nds ,string parentId)
{
DataView dv=new DataView() ;
TreeNode tmpNd;
dv.Table = objDataSet.Tables["TrvNodeStudent"];
dv.RowFilter = "GradeNodeId='" + (int.Parse(parentId.Substring(0,1))+1) + "' and ClassId='" + (int.Parse(parentId.Substring(2,1))+1) +"'";
foreach(DataRowView objRow in dv)
{
tmpNd=new TreeNode();
tmpNd.Text=objRow["StudentName"].ToString();
tmpNd.ImageUrl ="images/man.gif";
tmpNd.NavigateUrl ="StuInfoRight.aspx?stuId=" + objRow["StudentId"];
tmpNd.Target="main";
Nds.Add(tmpNd);
tmpNd=new TreeNode();
}
if (Nds.Count!=1)
{
Nds[0].Remove();
}
else
{
Nds[0].Remove();
tmpNd=new TreeNode();
tmpNd.Text="无数据";
Nds.Add(tmpNd);
}
} public void TreeViewOnclick(object sender,TreeViewClickEventArgs e)
{
if (e.Node.Length!=1 )
{
if (TrvStuInfo.Nodes[int.Parse(e.Node.Substring(0,1))].Nodes[int.Parse(e.Node.Substring(2,1))].Nodes.Count==1)
{
DB.CreateDataSet("student",objDataSet); intiTreeStudent(TrvStuInfo.Nodes[int.Parse(e.Node.Substring(0,1))].Nodes[int.Parse(e.Node.Substring(2,1))].Nodes, e.Node);
}
}
else
{
if (TrvStuInfo.Nodes[int.Parse(e.Node)].Nodes.Count==1 )
{
DB.CreateDataSet("class",objDataSet);
intiTreeClass(TrvStuInfo.Nodes[int.Parse(e.Node)].Nodes, int.Parse(e.Node)+1);
}
}
}
底层数据库连接类如下:public class db
{
public db()
{
}
public void CreateDataSet(string DsType ,DataSet objDataSet)
{
SqlDataAdapter objAdapter;
SqlConnection objCn=new SqlConnection(ConfigurationSettings.AppSettings["DsnWroxBooksSql"]);
if (DsType=="grade")
{
objCn.Open();
string strSql ="select * from V_Student_TrvNodeGrade";
objAdapter=new SqlDataAdapter(strSql,objCn);
objAdapter.Fill(objDataSet,"TrvNodeGrade");
} if (DsType=="class")
{
objCn.Open();
string strSql ="select * from V_Student_TrvNodeClass";
objAdapter=new SqlDataAdapter(strSql,objCn);
objAdapter.Fill(objDataSet,"TrvNodeClass");
} if (DsType=="student")
{
objCn.Open();
string strSql ="select * from V_Student_TrvNodeStudent";
objAdapter=new SqlDataAdapter(strSql,objCn);
objAdapter.Fill(objDataSet,"TrvNodeStudent");
}
}
}
以上是分布加载学生信息的代码
page_load里面加载年级信息,每个年级节点有一个字节点“loading...”
当点击该节电时,激发TreeViewOnclick事件
加载该年级对应的班级,如果没有,把“loading...”改成“无数据”
如果有数据,加载班级节点,学生信息以此类推
treeview的autoposeback属性要设置true
public class WebForm1 : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView TrvStuInfo;
private DataSet objDataSet = new DataSet();
protected System.Web.UI.WebControls.Table Table1;
private db DB=new db();
private void Page_Load(object sender, System.EventArgs e)
{
if (!this.IsPostBack)
{
DB.CreateDataSet("grade",objDataSet);
intiTreeGrade(TrvStuInfo.Nodes,0);
}
}
private void intiTreeGrade(TreeNodeCollection Nds , int parentId)
{
DataView dv=new DataView() ;
TreeNode tmpNd;
int strId;
dv.Table = objDataSet.Tables["TrvNodeGrade"];
foreach(DataRowView objRow in dv)
{
tmpNd=new TreeNode();
strId=(int)objRow["GradeId"];
tmpNd.ID=strId.ToString();
tmpNd.Text=objRow["GradeName"].ToString();
tmpNd.ExpandedImageUrl ="images/folderopen.gif";
tmpNd.ImageUrl="images/folder.gif" ;
tmpNd.NavigateUrl =objRow["GradeUrl"].ToString() ;
tmpNd.Target="main";
Nds.Add(tmpNd);
} foreach(TreeNode TN in TrvStuInfo.Nodes)
{
tmpNd=new TreeNode();
tmpNd.Text="Loading....";
TN.Nodes.Add(tmpNd);
}
}
private void intiTreeClass(TreeNodeCollection Nds ,int parentId)
{
DataView dv=new DataView() ;
TreeNode tmpNd;
dv.Table = objDataSet.Tables["TrvNodeClass"];
dv.RowFilter = "GradeNodeId='" + parentId.ToString() + "'";
foreach(DataRowView objRow in dv)
{
tmpNd=new TreeNode();
tmpNd.Text=objRow["ClassName"].ToString();
tmpNd.ExpandedImageUrl ="images/folderopen.gif";
tmpNd.ImageUrl="images/folder.gif" ;
Nds.Add(tmpNd);
tmpNd=new TreeNode();
tmpNd.Text="Loading....";
Nds[Nds.Count-1].Nodes.Add(tmpNd);
}
if (Nds.Count!=1)
{
Nds[0].Remove();
}
else
{
Nds[0].Remove();
tmpNd=new TreeNode();
tmpNd.Text="无数据";
Nds.Add(tmpNd);
}
} private void intiTreeStudent(TreeNodeCollection Nds ,string parentId)
{
DataView dv=new DataView() ;
TreeNode tmpNd;
dv.Table = objDataSet.Tables["TrvNodeStudent"];
dv.RowFilter = "GradeNodeId='" + (int.Parse(parentId.Substring(0,1))+1) + "' and ClassId='" + (int.Parse(parentId.Substring(2,1))+1) +"'";
foreach(DataRowView objRow in dv)
{
tmpNd=new TreeNode();
tmpNd.Text=objRow["StudentName"].ToString();
tmpNd.ImageUrl ="images/man.gif";
tmpNd.NavigateUrl ="StuInfoRight.aspx?stuId=" + objRow["StudentId"];
tmpNd.Target="main";
Nds.Add(tmpNd);
tmpNd=new TreeNode();
}
if (Nds.Count!=1)
{
Nds[0].Remove();
}
else
{
Nds[0].Remove();
tmpNd=new TreeNode();
tmpNd.Text="无数据";
Nds.Add(tmpNd);
}
} public void TreeViewOnclick(object sender,TreeViewClickEventArgs e)
{
if (e.Node.Length!=1 )
{
if (TrvStuInfo.Nodes[int.Parse(e.Node.Substring(0,1))].Nodes[int.Parse(e.Node.Substring(2,1))].Nodes.Count==1)
{
DB.CreateDataSet("student",objDataSet); intiTreeStudent(TrvStuInfo.Nodes[int.Parse(e.Node.Substring(0,1))].Nodes[int.Parse(e.Node.Substring(2,1))].Nodes, e.Node);
}
}
else
{
if (TrvStuInfo.Nodes[int.Parse(e.Node)].Nodes.Count==1 )
{
DB.CreateDataSet("class",objDataSet);
intiTreeClass(TrvStuInfo.Nodes[int.Parse(e.Node)].Nodes, int.Parse(e.Node)+1);
}
}
}
底层数据库连接类如下:public class db
{
public db()
{
}
public void CreateDataSet(string DsType ,DataSet objDataSet)
{
SqlDataAdapter objAdapter;
SqlConnection objCn=new SqlConnection(ConfigurationSettings.AppSettings["DsnWroxBooksSql"]);
if (DsType=="grade")
{
objCn.Open();
string strSql ="select * from V_Student_TrvNodeGrade";
objAdapter=new SqlDataAdapter(strSql,objCn);
objAdapter.Fill(objDataSet,"TrvNodeGrade");
} if (DsType=="class")
{
objCn.Open();
string strSql ="select * from V_Student_TrvNodeClass";
objAdapter=new SqlDataAdapter(strSql,objCn);
objAdapter.Fill(objDataSet,"TrvNodeClass");
} if (DsType=="student")
{
objCn.Open();
string strSql ="select * from V_Student_TrvNodeStudent";
objAdapter=new SqlDataAdapter(strSql,objCn);
objAdapter.Fill(objDataSet,"TrvNodeStudent");
}
}
}
以上是分布加载学生信息的代码
page_load里面加载年级信息,每个年级节点有一个字节点“loading...”
当点击该节电时,激发TreeViewOnclick事件
加载该年级对应的班级,如果没有,把“loading...”改成“无数据”
如果有数据,加载班级节点,学生信息以此类推
treeview的autoposeback属性要设置true
{ treeDept.Nodes.Clear();
TreeNode nodeDept=new TreeNode();
nodeDept.ID="0";
nodeDept.Text="部门机构";
nodeDept.NodeData="-1";
treeDept.Nodes.Add(nodeDept);
dsDept=dataObject.GetDeptDataSet();
InitDeptTree(nodeDept,"0");
nodeDept.Expanded=true;
} private void InitDeptTree(TreeNode nodeDept, string strDeptId)
{
string strCondition="ParentId='"+strDeptId+"'";
DataRow[] row=dsDept.Tables[0].Select(strCondition); for(int i=0; i<=row.GetUpperBound(0);i++)
{
TreeNode nodeTemp=new TreeNode();
nodeTemp.ID=row[i][0].ToString();
nodeTemp.Text=row[i][1].ToString();
nodeTemp.NodeData=row[i][2].ToString();
nodeDept.Nodes.Add(nodeTemp);
InitDeptTree(nodeTemp,nodeTemp.ID);
}
} public void RefreshTree(TreeView treeDept)
{
TreeNode nodeDept=CurrentNode(treeDept);
string strDeptId=GetDeptId(treeDept);
dsDept=dataObject.GetDeptDataSet();
nodeDept.Nodes.Clear();
InitDeptTree(nodeDept,strDeptId);
nodeDept.Expanded=true;
}
如果结点是从数据库读取的请用 Javascript 调用 WebService 来实现,这样子不会造成屏幕闪烁。