try this:
http://msdn.microsoft.com/library/default.asp?url=/workshop/webcontrols/overview/treeview.asp
http://msdn.microsoft.com/library/default.asp?url=/workshop/webcontrols/overview/treeview.asp
解决方案 »
- Mvc3.0 reutrn View() 问题
- JavaScript无法调用VC++制作的有句柄参数的ActiveX控件中的函数......
- datagrid的ItemDataBound事件
- 请教关于多个表查询后绑定到DataGrid的问题
- 页面上的一个按钮(Button),点击后能否出现个询问是否继续的对话框?
- datagrid导出excel又有问题了,大家帮帮忙
- 删除文件的问题
- 哪里有管理 .net的 vss下载啊,找死了,没找到:( 英文版的
- 求asp.net+vb.net 文件下载的完整代码
- MSDN上说“只能读取属于同一域的页所设置的 Cookie”
- 请问哪里有用asp.net编写的论坛源程序代码下载?
- 有没有办法用c#编写server端程序, 来检察用户端机器的内存?
本文介绍用Internet Explorer WebControls开发树形图的方法,详细阐述在ASP.NET下如何将Internet Explorer WebControls的使用与数据库联系起来,实现数据分任意多层显示,方便地进行增加、修改、删除、移动操作。
Internet Explorer WebControls不在VS.NET的标准Server Control中,要到微软的站点上下载,下载地址是:
http://msdn.microsoft.com/downloads/samples/internet/default.asp?url=/Downloads/samples/Internet/ASP_DOT_NET_ServerControls/WebControls/default.asp
下载安装后第一次使用时,要右击工具箱Customize Toolbox…→.NET Framework Components中找到Micosoft.Web.UI.WebControls.Treeview后选中,这样Treeview控件就出现在工具箱中了。
动态加载目录书有不同的方法,我将结合实例介绍两种常用的方法。
1.利用树形图信息表进行初始化。
这种方法在页面初始化的时候一次性将目录书的所有节点全部初始化。适合目录树结点较少,并且相对固定的情况。树的建立
具体方法是:创建一个数据库,设计树图信息表TREE_INFO,包含NODEID、PARENTID、NODENAME、ADDERSS、ICON字段,其它字段根据实际业务而定,节点名称NODENAME将在树型控件的节点上显示,NODEID字段保存节点的唯一标识号,PARENTID表示当前节点的父节点号,标识号组成了一个“链表”,记录了树上节点的结构。设计一个Web窗体其上放置TreeView控件。
实例的表结构如下:主键 字段名 类型 长度 可空
1 NODEID int 4 0
0 PARENTID int 4 0
0 NODENAME nvarchar 100 0
0 ADDERSS nvarchar 100 1
0 Img nvarchar 100 1
0 ImgEx nvarchar 100 1实例程序如下:
public class WebForm1 : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.Toolbar Toolbar1;
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
protected System.Web.UI.WebControls.Label a;
protected connect_strings SqlCn;
string CnString;
protected System.Web.UI.WebControls.TextBox TextBox1;
DataSet objDataSet = new DataSet();
{
Class1 TestClass=new Class1();
TestClass.TestString="fjdkls;a";
CnString=SqlCn.SQLConnectionString;
if (!this.IsPostBack)
{
CreateDataSet();
intiTree(TreeView1.Nodes,0);
}
}
private void intiTree(TreeNodeCollection Nds , int parentId)
{
DataView dv=new DataView() ;
//DataRowView drv;
TreeNode tmpNd;
int strId;
dv.Table = objDataSet.Tables["TREE_INFO"];
dv.RowFilter = "PARENTID='" + parentId + "'";
foreach(DataRowView objRow in dv)
{
tmpNd=new TreeNode();
strId=(int)objRow["NODEID"];
tmpNd.ID=strId.ToString();
tmpNd.Text=objRow["NODENAME"].ToString();
tmpNd.ExpandedImageUrl =objRow["ImgEx"].ToString();
tmpNd.ImageUrl=objRow["Img"].ToString() ;
tmpNd.NavigateUrl =objRow["Adderss"].ToString() ;
Nds.Add(tmpNd);
intiTree(Nds[Nds.Count-1].Nodes,strId);
}
}
private void CreateDataSet()
{
SqlConnection objCn=new SqlConnection(CnString);
objCn.Open();
string strSql ="select * from TREE_INFO";
SqlDataAdapter objAdapter=new SqlDataAdapter(strSql,objCn);
objAdapter.Fill(objDataSet,"TREE_INFO");
}
}目录树结点的增加
单纯在Treeview 上增加、删除、修改节点只需用Nodes属性的Add、 Remove、等方法即可,值得注意的地方是VS.NET中Treeview的Nodes集合与VS6.0中的区别,VS6.0中的是一个大的集合,而VS.NET中的是分层的每个Node下都有Nodes属性。增加、删除、修改树节点时与VS6.0相比有很大差别,特别是删除时。
下面是增加和删除的代码:
private void BtnAdd_Click(object sender, System.EventArgs e)
{
TreeNode NdSel;
TreeNode tmpNd=new TreeNode();
tmpNd.Id= GetNewId()
NdSel = TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex);
tmpNd.Text = "新节点" ;
NdSel.Nodes.Add(tmpNd);
} private void BtnDel_Click(object sender, System.EventArgs e)
{
TreeNode NdSel;
TreeNode tmpNd=new TreeNode();
NdSel = TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex);
tmpNd.Text = "新节点" ;
NdSel.Remove();
}移动目录树结点:
由于服务器控件不支持鼠标拖动事件,所以不能象Windows程序那样通过拖动移动节点,这里是通过选择父节点的方式。移动是通过在原位置删除,新位置添加实现的,要注意在删除时先保存节点信息。
private void InitTree(TreeNodeCollection Nds,int parentId)
{
DataView dv=new DataView();
TreeNode tmpNd ;
int intId;
dv.Table=ds.Tables["tree"];
dv.RowFilter=" parentnode=" + parentId + " and nodenum > 0";
foreach(DataRowView drv in dv)
{
tmpNd = new TreeNode();
tmpNd.Tag=int.Parse(drv["nodenum"].ToString().Trim());
tmpNd.Text=drv["nodelabel"].ToString().Trim();
if(int.Parse(drv["nodetype"].ToString().Trim()) == 1)
{
tmpNd.ImageIndex = 0 ;
tmpNd.SelectedImageIndex = 1 ;
}
else
{
tmpNd.ImageIndex = 2 ;
tmpNd.SelectedImageIndex = 3 ;
}
Nds.Add(tmpNd);
intId=int.Parse(drv["parentnode"].ToString().Trim());
InitTree(tmpNd.Nodes,int.Parse(drv["nodenum"].ToString().Trim()));
}