|
回复人: houbinbin() ( ) 信誉:95
|
2002-10-24 17:08:14Z
|
得分:0
|
|
|
?
|
window.external.AddFavorite(location.href, document.title);
|
Top
|
|
|
回复人: yirenboy(一人) ( ) 信誉:99
|
2002-10-24 17:15:14Z
|
得分:0
|
|
|
?
|
我们的管理平台也是如此具有个性化的设计!
(我们假定已经建好一个用来存放收藏夹数据的表)
首先,在你所要做收藏的站点内的每个页面内,应该返回这个页面的地址和参数(假如你的页面是动态的),这可以在每个页面上放一个收藏的按钮,点击这个按钮跳转到一个处理页面,把收藏的信息让用户验证。
接着,当用户确定的时候就把用户和所返回的地址及参数存到收藏家的数据库里面,这样就收集到了该用户的所有信息。
最后,就是显示问题,如果要采用(资源浏览器的样子)可以采用TreeView,这是一个相当好的解决方法。
这个问题所必须注意的是:
1。每个页面参数的返回。
2。如何为每个用户收集收藏地址。
3。如何显示,也就是为每个用户定制不同的收藏夹。
注:有问题的话共同讨论!
|
Top
|
|
|
回复人: yirenboy(一人) ( ) 信誉:99
|
2002-10-24 17:17:12Z
|
得分:0
|
|
|
?
|
效果如CSDN的效果,每个人拥有不同的收藏地址
不过显示方式不同,我所述的是树状的!
|
Top
|
|
|
回复人: tuery() ( ) 信誉:88
|
2002-10-24 18:52:20Z
|
得分:0
|
|
|
?
|
抱歉, houbinbin() ,我想你误会我的意思了,我不是要加什么进收藏夹,我是想知道怎样在aspx网页里造出收藏夹那样的功能,但那功能是用来收藏菜单的。
yirenboy(一人),我感觉csdn的还没以下的好
http://bbs1.tom.com/bbs.php?forumid=150
这网页可能利用分框的功能,可否我们向这方面想?谢谢!
|
Top
|
|
|
回复人: yirenboy(一人) ( ) 信誉:99
|
2002-10-24 19:26:05Z
|
得分:0
|
|
|
?
|
哦,Misunderstand me!
是的,我所说的相似csdn,所说的是每个人都拥有不同的收藏家地址,而并不是知他的表现形式.如果从表现形式来说,我也觉得csdn不可取,不过csdn为了用户的收藏量(100条)和和站点的风格考虑采用了现在的格式.
我明白你所要做的形式,也就是分成两幀左右两帧,其形式如你给的地址一样,你也看到了csdn在论坛的形式也是这样的.其实csdn和你所给的地址都是采用了分帧和TreeView(和我现在的作的是一样的),而且TreeView是动态生成的,就是用户添加一个地址进去就在左边出现一个连接地址.
这些问题如我上面所提!
|
Top
|
|
|
回复人: yirenboy(一人) ( ) 信誉:99
|
2002-10-24 19:27:23Z
|
得分:0
|
|
|
?
|
树形图用于显示按照树形结构进行组织的数据,其用途比较广泛,如计算机中的文件系统(Windows中的资源管理器)、企业或公司的组成结构等。我们知道在Windows下VB、PB、Delphi等工具提供了一个功能很强的树型控件TreeView,利用Treeview控件可以方便地开发树形图。然而在网页上实现树形图就不那么容易了,现在在ASP.NET中利用微软提供的Internet Explorer WebControls它使得网页上的树形图开发与在Windows下一样的方便,一样的功能强大,甚至更灵活。
本文介绍用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();
private void Page_Load(object sender, System.EventArgs e)
{
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() ;
tmpNd.target="右面框架的名字";
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");
}
}
其中 tmpNd.target="右面框架的名字";
就是设置treeNode所影响的框架
这样点击目录树结点,就能使右面框架重定向
|
Top
|
|
|
回复人: tuery() ( ) 信誉:88
|
2002-10-25 01:15:14Z
|
得分:0
|
|
|
?
|
都怪我,yirenboy(一人) ,你误会了,其实做treeview很简单,我们只要去www.gotdotnet.com里查treeview,它不但给你代码还给例子,很快就搞好的了。
我想问的是,例如在http://bbs1.tom.com/bbs.php?forumid=150
怎样实现那个可以去掉左边分框的按钮功能。
还有的就是选了左边框treeview下的按钮时,怎样让右边的就是它选择的网页?谢谢!
|
Top
|
|
|
回复人: yirenboy(一人) ( ) 信誉:99
|
2002-10-25 08:48:35Z
|
得分:0
|
|
|
?
|
这个问题也好解决,你可以设为两帧(左右)假如为Page1、 Page2,其中Page1所放的是TreeView的页面,你可以把Target指向右帧就可以了。如:node0.Target="rightone";而rightone是我在第二点所定义的右帧,也就是右边的选择的网页。
简单来说,左边的treeview的各节点连接的是每个连接地址,点击时刷新它所指向目标Target(右帧),就是这么个原理,如下示例:
-------------------------------------------------------------------
对于你的问题:
1.首先创建空白页 wfmAbout.aspx 指向wfmAboutDisplay.aspx页面
----------------------------------------------------------
<iframe name="I1" align="top" hspace="0" vspace="0" src="wfmAboutDisplay.aspx" frameBorder="0" width="778" scrolling="yes" height="100%" style="WIDTH: 778px; HEIGHT: 74%">
</iframe>
2.wfmAboutDisplay.aspx这也是一个空白页,是为了转向所定义的两帧
wfmAboutLeft.aspx和wfmAboutRightDisplay.aspx,其中wfmAboutLeft.aspx是TreeView所在的页面,wfmAboutRightDisplay.aspx是一个跳转页面或是你键入此地址的默认页面.
----------------------------------------------------------
<frameset cols="136,635">
<frame src="wfmAboutLeft.aspx" scrolling="no" noresize frameborder="0" name="leftone">
<frame src="wfmAboutRightDisplay.aspx frameborder="no" name="rightone"> // 用来命名触发TreeView所致向的目标
</frameset>
3.设定左帧wfmAboutLeft.aspx 调用TreeView,ID = TreeViewAboutLeft
--------------------------------------------------------
前台代码:
<iewc:treeview id="TreeViewAboutLeft" runat="server" SelectExpands="True" Height="100%" width="136" AutoSelect="True" AutoPostBack="false"></iewc:treeview>
后台代码:(作个摘要,最关键的已经列出,代码太长了,贴不完了)
public class wfmAboutLeft : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView TreeViewAboutLeft;
private void dgPageBind()
{
string strSelIndex="0";
string strCondbMemorabilia=clsCommon.strCondbMemorabilia;
string strSql="select cnilistID,cnvcListName,cnvcLink,cniNodeLink from tbAboutList order by cniListID asc";
clsCommon clsNode=new clsCommon();
DataSet dsNode=clsNode.GetData(strCondbMemorabilia,strSql);
if(Convert.ToInt32(dsNode.Tables["ErrorTable"].Rows[0]["cniErrorID"])==1)
{
DataTable dtNode=dsNode.Tables["dtRetu"];
int kNodeCount=dtNode.Rows.Count;
for (int k=0;k<kNodeCount;k++)
{
TreeNode node0=new TreeNode();
node0.Text=dtNode.Rows[k]["cnvcListName"].ToString();
node0.NavigateUrl=dtNode.Rows[k]["cnvcLink"].ToString();
node0.Target="rightone";
TreeViewAboutLeft.Nodes.Add(node0);
//进入TreeView的第二层循环,加入是“集团简介”这个节点
if(Convert.ToInt32(dtNode.Rows[k]["cniNodeLink"]) ==1)
{
string strCondbUserInfo=clsCommon.strCondbUserInfo;
string strSqlUserInfo="select cncBlockID,cnvcBlockCName,cnvcBlockCName2 from tbBlock order by cncBlockID asc";
clsCommon clsFirstNode=new clsCommon();
DataSet dsFirstNode=clsNode.GetData(strCondbUserInfo,strSqlUserInfo);
if(Convert.ToInt32(dsFirstNode.Tables["ErrorTable"].Rows[0]["cniErrorID"])==1)
{
DataTable dtFirstNode=dsFirstNode.Tables["dtRetu"];
int iNodeCount=dtFirstNode.Rows.Count;
string temNodeID;//设置公司所属板块入口
for (int i=0;i<iNodeCount;i++)
{
if(Convert.ToInt32(dtFirstNode.Rows[i]["cncBlockID"].ToString())<10)
{
TreeNodeCollection tnc0=node0.Nodes;
TreeNode node1=new TreeNode();
temNodeID=dtFirstNode.Rows[i]["cncBlockID"].ToString();
node1.Text=dtFirstNode.Rows[i]["cnvcBlockCName2"].ToString();
node1.NavigateUrl=@"wfmAboutRightDisplay.aspx?strSelIndex="+Convert.ToString(strSelIndex);
strSelIndex=Convert.ToString(Convert.ToDouble(strSelIndex)+0.1);
node1.Target="rightone";
tnc0.Add(node1);
//进入TreeView的第三层循环,列出板块下各子公司
string strCondbAboutCompany=clsCommon.strCondbUserInfo;
string strSqlAboutCompany="select cncCompanyID,cnvcCompanyCName,cnvcCompanyCName2 from tbCompany where cncBlockID='"+temNodeID+"' order by cntiComDispOrder asc";
clsCommon clsSecondNode=new clsCommon();
DataSet dsSecondNode=clsSecondNode.GetData(strCondbAboutCompany,strSqlAboutCompany);
if(Convert.ToInt32(dsSecondNode.Tables["ErrorTable"].Rows[0]["cniErrorID"])==1)
{
DataTable dtSecondNode=dsSecondNode.Tables["dtRetu"];
int mSecondNodeCount=dtSecondNode.Rows.Count;
for(int m=0;m<mSecondNodeCount;m++)
{
TreeNodeCollection tnc1=node1.Nodes;
TreeNode node2=new TreeNode();
node2.Text=dtSecondNode.Rows[m]["cnvcCompanyCName2"].ToString();
node2.NavigateUrl=@"Brief/wfmAboutBriefCompany.aspx?cncCompanyID="+Convert.ToString(dtSecondNode.Rows[m]["cncCompanyID"])+"&cnvcCompanyCName="+Convert.ToString(dtSecondNode.Rows[m]["cnvcCompanyCName"]);
node2.Target="rightone";
tnc1.Add(node2);
}
}
//结束TreeView的第三层循环
}
}
}....
4.设立右帧,也就是你指向的页面地址了!
|
Top
|
|
|
回复人: tuery() ( ) 信誉:88
|
2002-10-25 18:40:01Z
|
得分:0
|
|
|
?
|
yirenboy(一人),你太伟大了,看到你的细心指导真是感动,不过我在www.gotdotnet.com里得到的代码很简单,如下:
<%@ import namespace="Microsoft.Web.UI.WebControls" %>
<%@ Register TagPrefix="mytree"
Namespace="Microsoft.Web.UI.WebControls"
Assembly="Microsoft.Web.UI.WebControls, Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<HTML>
<HEAD>
<TITLE>Internet Explorer WebControls: TreeView Sample</TITLE>
<!-- SAMPLE_STYLE_START -->
<LINK REL="stylesheet" HREF="../samples.css" TYPE="text/css">
<!-- SAMPLE_STYLE_END -->
</HEAD>
<body>
<BLOCKQUOTE CLASS="body">
<h1>
Internet Explorer WebControls: TreeView Sample
</h1>
<hr>
<p>
This sample shows a simple TreeView WebControl that was created entirely by
markup declaration.
</p>
<form id="myform" runat="server">
<mytree:treeview runat="server" ChildType="Folder" id="Treeview1">
<mytree:treenodetype Type="Folder" ExpandedImageUrl="./images/folderopen.gif" ImageUrl="./images/folder.gif" />
<mytree:treenode Text="Michigan">
<mytree:treenode Text="Detroit" />
<mytree:treenode Text="Farmington" />
<mytree:treenode Text="Southfield" />
</mytree:treenode>
<mytree:treenode Text="Washington">
<mytree:treenode Text="Bellevue" />
<mytree:treenode Text="Redmond" />
<mytree:treenode Text="Woodinville" />
</mytree:treenode>
</mytree:treeview>
</form>
<br>
<div>
<BUTTON style="BEHAVIOR: url('../viewsrc.htc')" src="./source/treeview1.src" type="button">
View Web Page Source</BUTTON>
</div>
<!-- START_PAGE_FOOTER -->
<BR>
<BR>
<BR>
?<A CLASS="clsIncCpyRt" HREF="http://msdn.microsoft.com/isapi/gomscom.asp?target=/misc/cpyright.htm" TARGET="_top">
Microsoft Corporation. All rights reserved. Terms of use</A>.
<!-- END_PAGE_FOOTER -->
</BLOCKQUOTE>
</body>
</HTML>
如果以上代码做为左框,兄台可否指点怎样使它与右框相互连接?那个让它消失和重现的按钮又如何安排?再谢谢!
|
Top
|
|
|
回复人: yirenboy(一人) ( ) 信誉:99
|
2002-10-25 22:15:26Z
|
得分:0
|
|
|
?
|
1.怎样使它与右框相互连接?
假设你的TreeView在左框(暂为:wfmLeft.aspx),你的右帧为(wfmRight.aspx),并且把这两帧放到wfmDisplay.aspx的页面上去,如下所似:
---------------------------------------------------------
<frameset cols="136,635">
<frame src="wfmLeft.aspx" scrolling="no" noresize frameborder="0" name="leftone">
<frame src="wfmRight.aspx frameborder="no" name="rightone"> // 用来命名触发TreeView所致向的目标
</frameset>
--------------------------------------------------------
其中分别命名了左右两帧的名字分别是leftone,rightone,这样你点击TreeView的节点的时候,就可以指向其目标了(这里是rightone)
---------------------------------------------------------
其中TreeView的节点都有属性如:NavigateUrl,Target分别是你的连接地址和你所指向的目标(也就是这里的node.Target = rightone ),这时候可以把你的参数传到目标帧(rightone).
2.那个让它消失和重现的按钮又如何安排?
这显然是采用了JavaScript的脚本来实现的了,我看了其页面的显示源码,可以看到三个部分,其中中间部分采用了脚本,程序如下:
-----------------------------------------------------------
<script language=javascript>
function changeWin(){
if(parent.forum.cols!="10,*")
{
parent.forum.cols="10,*";
document.all.menuSwitch.innerHTML="<font class=point>4</font>";
}
else
{
parent.forum.cols="127,*";
document.all.menuSwitch.innerHTML="<font class=point>3</font>";
}
}
</script>
其中相应的代码如下:
-----------------------------------------------------
<tr>
<td height=1 οnclick=changeWin()>
<img src="data:images/shim.gif" width=10 height=1></td></tr>
<tr><td οnclick=changeWin() height=100% id=menuSwitch><font class=point>3</font></td></tr>
------------------------------------------------------
不过对于具体实现方法我没有这方面的经验,你可以在问一下,或是朝找相关的资料!
|
Top
|
|
|
回复人: tuery() ( ) 信誉:88
|
2002-10-26 02:54:05Z
|
得分:0
|
|
|
?
|
我查了framework的帮助,都没有详细说怎样用Target,兄台可否再指点一下,例如我参照你上面的,写了:
<iewc:TreeNode NavigateUrl="http://localhost/quickstart/aspplus/" Text="Detroit" Target="rightone"></iewc:TreeNode>
但按了那个点后,它还是弹出了另一个窗口打开http://localhost/quickstart/aspplus/的内容,而不是在rightone的框里打开,唉,我知道我太笨了,请兄台再帮我一次吧,谢谢!
|
Top
|
|
|
回复人: tuery() ( ) 信誉:88
|
2002-10-26 03:00:48Z
|
得分:0
|
|
|
?
|
但是我参照兄台以上的例子,写了如下:
<iewc:TreeNode NavigateUrl="http://localhost/quickstart/aspplus/" Text="Detroit" Target=rightone"></iewc:TreeNode>
按了那个点后,它并不在rightone框里打开http://localhost/quickstart/aspplus/的内容,反而在另一个ie里打开,唉,我知道我很笨,兄台送佛送到西,就再帮小弟一次吧,谢谢!
|
Top
|
|
|
回复人: yirenboy(一人) ( ) 信誉:99
|
2002-10-26 10:40:30Z
|
得分:100
|
|
|
?
|
首先我建议你再看一下我在2002-10-25 08:48:00 发的帖子,里面已经详细说明如何分帧的问题.这里我就重新复述一下:
首先你应该有五个页面wfmTemDisplay.aspx,wfmDisplay.aspx,wfmLeft.aspx,wfmRight.aspx,http://localhost/quickstart/aspplus/
1.wfmTemDisplay.aspx:这是用来指向分帧的页面,代码如下:
--------------------------------------------------------
<iframe name="I1" src="wfmDisplay.aspx" frameBorder="0" width="778" scrolling="yes" height="100%" style="WIDTH: 778px; HEIGHT: 74%">
</iframe>
--------------------------------------------------------
2.wfmDisplay.aspx:这是一个分帧页面,代码如下:
-------------------------------------------------------
<frameset cols="136,635">
<frame src="wfmLeft.aspx" scrolling="no" noresize frameborder="0" name="leftone">
<frame src="wfmRight.aspx frameborder="no" name="rightone"> // 用来命名触发TreeView所致向的目标
</frameset>
------------------------------------------------------
3.wfmLeft.aspx(leftone):这是左边存放TreeView的页面,代码如你所写
4.wfmRight.aspx(rightone):指向的目标页面
5.http://localhost/quickstart/aspplus/显示的页面
其中wfmTemDisplay.aspx,wfmDisplay.aspx,wfmRight.aspx并没有具体的显示内容都是为创建分帧而设的!
如果还有问题可以继续讨论~~```
|
Top
|
|
|
回复人: sbzb(Sam) ( ) 信誉:97
|
2002-10-26 10:49:39Z
|
得分:0
|
|
|
?
|
还有,请教:yirenboy(一人)
我有一个问题:
我在开发中遇到这样一个问题:希望把某个用户上传文件的总容量控制在8M内,那么就需要计算此用户所上传文件的总量(包括他以前上传的文件),数据库里存放的是图片名(不是图片!!),请问这个怎么解决,有谁遇到过这个问题?
|
Top
|
|
|