说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

treeview控件,如何让其点击结点后再从数据库中取得这个节点的下一层节点?

编辑:说三道四文库 发布时间:2018-01-22 04:12
HTML文档下载 WORD文档下载 PDF文档下载
treeview控件,如何让其点击结点后再从数据库中取得这个节点的下一层节点?
因为我的树非常庞大,一次读出来,速度会非常慢,只一层一层的去读!
大虾帮帮忙吧!成功后立马付帐!:)
UP
那就在 节点的 onclick 事件 中写读取数据库的操作不就成了么?
2.分步加载目录树
这种方法首先加载目录树的第一层节点,然后通过事件激发加载其他节点,适合于目录树结点较多,目录树结点不固定的情况。

程序如下:
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");
}
}
}
给你一段我的代码,树多庞大,都没问题。
public void root()
{
//首先得到所有根节点 dtype()是数据类,你可不管
                          DataTable dt=new DType().GetTypeTree(0).Tables[0];

TreeNode node;

foreach (DataRow dr in dt.Rows )
{
node=new TreeNode();
node.NodeData =dr["typeid"].ToString() ;
node.Text =dr["name"].ToString();

if (new DType().GetTypeInfo(Convert.ToInt32(dr["typeid"])).imagepath.ToString()=="")
{
node.ImageUrl = imagepath+"folder.gif";

}
else
{
node.ImageUrl = imagepath+new DType().GetTypeInfo(Convert.ToInt32(dr["typeid"])).imagepath.ToString();
}
node.ExpandedImageUrl = imagepath+"folderopen.gif";
node.SelectedImageUrl = imagepath+"html.gif";
node.Target =target;
node.NavigateUrl=navigateurl+"?typeid=" +node.NodeData.ToString();

TreeView1.Nodes.Add(node);
create(node);
}
}

private void create(TreeNode parentnode)
{
DataTable dt=new DType().GetTypeTree(Convert.ToInt32( parentnode.NodeData)).Tables[0];
TreeNode node;

foreach (DataRow dr in dt.Rows )
{
node=new TreeNode();
node.NodeData =dr["typeid"].ToString();
node.Text =dr["name"].ToString();
if (new DType().GetTypeInfo(Convert.ToInt32(dr["typeid"])).imagepath.ToString()=="")
{
node.ImageUrl = imagepath+"folder.gif";

}
else
{
node.ImageUrl = imagepath+new DType().GetTypeInfo(Convert.ToInt32(dr["typeid"])).imagepath.ToString();
}
node.ExpandedImageUrl = imagepath+"folderopen.gif";
node.SelectedImageUrl = imagepath+"html.gif";
node.Target =target;
node.NavigateUrl=navigateurl+"?typeid=" +node.NodeData.ToString();

parentnode.Nodes.Add(node);
create(node);
}
以上是分布加载学生信息的代码

page_load里面加载年级信息,每个年级节点有一个字节点“loading...”

当点击该节电时,激发TreeViewOnclick事件

加载该年级对应的班级,如果没有,把“loading...”改成“无数据”

如果有数据,加载班级节点,学生信息以此类推

treeview的autoposeback属性要设置true
以上是分布加载学生信息的代码

page_load里面加载年级信息,每个年级节点有一个字节点“loading...”

当点击该节电时,激发TreeViewOnclick事件

加载该年级对应的班级,如果没有,把“loading...”改成“无数据”

如果有数据,加载班级节点,学生信息以此类推

treeview的autoposeback属性要设置true
太谢谢了,真是好哥们,我这就try 一下,成功之后,结帐!:)
太谢谢了,真是好哥们,我这就try 一下,成功之后,结帐!:)
gj0001(阿江) ,你好,你可不可以把你的例子完整的列出来???
我用了三层不太好贴
我的数据类在这:GetTypeTree方法如下:
public DataSet GetTypeTree(int parentid)
{
SqlParameter[] parms=new SqlParameter[1];
parms[0]=new SqlParameter(PARM_PARENTID,parentid);

DataSet ds=SqlHelper.ExecuteDataset(SqlHelperConn.ConnStr,CommandType.Text,SQL_SELECT_TREE,parms);
return ds;
}


请问老大,你的treeview控件怎么调出来的?为什么我的ToolBox中没有该控件的图标,然后我用添加,找到的TreeView是WindowsForm的,在Web下面不现实,请问怎么才能像你们一样能够在ASP.NET下面使用啊?
AskerX(问问) 你要先去下载,安装才行,论坛上的这样的贴子很多啊,搜索一下就ok!了!
闪动窗口标题 -VB资料 闪烁的标题栏 -VB资料 实现画面的各种切换方法-VB资料 实现屏幕变暗的效果 -VB资料 实现图像切换效果 -VB资料 请教关于TreeView的一个事件 关于表里ID恢复初始值的请教? 贴这首歌的歌词的兄弟,100分独得!广东的兄弟有优势,上海的高手也挺多。东北的兄弟靠你们了! 我想追一个女孩,请水友们帮我出主意,谢谢! [help]关于参数和相关软件路径设置的问题 汉字编码问题? 如何给System.Diagnostics.Process.StartInfo.Arguments属性设置带空格的值? 为什么我的数据库连不上了? 安徽的软考分数什么时候下来呀 苯的正常凝固点 苯的凝固点的精确值 苯甲酰甲酸甲酯 凝固点苯甲酰甲酸甲酯的凝固点是多少 硝基苯和苯可无限混溶,二者凝固点分别为5.7度,5 伴随着工业文明的到来,有着辉煌农耕文明历史的中国社 耕作性能什么意思? 起重机用钢绳吊着质量为m重物从静止开始匀速加速上升 农业开发企业支付给政府的土地经营权费用应如何核算? 什么叫化合物分子中碳原子杂化状态? 美国一学生为完成作业扮流浪汉进学校后以总理:伊朗有能力在数周内提炼武器级评论:欧债危机促欧盟内部各成员国重新塞尔维亚为铁托遗孀举行国葬 2万多人谷歌无人驾驶汽车安全性可超人类驾驶(高沙爆水管 断水13个钟《茶道生活》亮相广州茶博会马鞍山:景区“拿下”5A,政府奖10宿州一养鸭场突发大火 2万只幼鸭变成加拿大央行维持1%基准利率不变网游之虎王至尊离婚了就别再爱我:名义夫妻自由穿越之重整江山至尊武修雄霸禁区世博会旅游迎泽公园旅游文瀛公园旅游晋祠旅游汾河公园旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘