• 主页
  • ASP
  • .NET Framework
  • Web Services
  • VB
  • VC
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • LINQ

服务器控件,还是treeview的问题,急!

NoReady 2004-07-06 06:02:47
//这是所有的代码:
//-------------------------
/// <文件声明>
/// <重要等级>重要</重要等级>
/// <公司名称>杭州华讯通信科技有限公司</公司名称>
/// <项目组>文档库组件开发组</项目组>
/// </文件声明>
/// <文件描述>
/// 完成目录树的显示、创建、删除功能。
/// </文件描述>
/// <创建时间>2004-7-6</创建时间>
/// <建立者>王宏武</建立者>
/// <版本号>Ver 0.1</版本号>
///
/// <修改>
/// <修改记录>
/// <修改记录编号></修改记录编号>
/// <修改时间></修改时间>
/// <修改者></修改者>
/// <新版本号></新版本号>
/// </修改记录>
/// </修改>
///


using System;
using System.IO;
using System.Drawing;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using Microsoft.Web.UI.WebControls;

namespace HuaXun.DocLibrary.UI
{

/// <summary>
/// 文档库目录树控件。
/// </summary>
/// <remarks>
/// 此控件用到的微软的TreeView控件,
/// 所以依赖于Microsoft.Web.UI.WebControls.dll,
/// 在使用该控件时,需要将Microsoft.Web.UI.WebControls.dll也引用。
/// </remarks>
public class ucFolderTreeCtrl:WebControl, INamingContainer
{

#region private variant

/// <summary>
/// 节点的组成
/// </summary>
private struct TreeNodeField
{
/// <summary>
/// 目录Url
/// </summary>
public const string ConUrl="Url";

/// <summary>
/// 目录显示名称
/// </summary>
public const string ConDisplayName="DisplayName";

/// <summary>
/// 目录父Url
/// </summary>
public const string ConParentUrl="ParentUrl";
}

/// <summary>
/// 订阅按钮
/// </summary>
LinkButton lnbtnSubscription;

/// <summary>
/// 删除按钮
/// </summary>
LinkButton lnbtnDelete;

/// <summary>
/// 增加按钮
/// </summary>
LinkButton lnbtnAdd;

/// <summary>
/// 目录树
/// </summary>
TreeView trvFolder;

#endregion

#region constructor

/// <summary>
/// 构造函数
/// </summary>
public ucFolderTreeCtrl():base()
{
this.Font.Name = "verdana";
this.Font.Size = FontUnit.Point(8);
this.BackColor = Color.Gainsboro;
this.ForeColor = Color.Black;
this.BorderStyle = BorderStyle.Solid;
this.BorderWidth = Unit.Parse("1px");
this.CacheDuration=60;
}

#endregion

#region public methods

/// <summary>
/// 节点选择事件的委托
/// </summary>
public delegate void SelectEventHandler(object sender, TreeViewSelectEventArgs e);

/// <summary>
/// 选择事件
/// </summary>
public event SelectEventHandler SelectedIndexChange;

/// <summary>
/// 触发事件SelectedIndexChange
/// </summary>
/// <param name="e"></param>
protected virtual void OnPageIndexChanged(TreeViewSelectEventArgs e)
{
if (SelectedIndexChange != null)
SelectedIndexChange(this, e);
}

/// <summary>
/// 目录树数据的缓存时间,以秒为单位,默认为60秒。
/// </summary>
public int CacheDuration
{
get {return Convert.ToInt32(ViewState["CacheDuration"]);}
set {ViewState["CacheDuration"] = value;}

}

/// <summary>
/// 重写Render,以便自定义输出控件的外观。
/// </summary>
/// <param name="output"></param>
protected override void Render(HtmlTextWriter output)
{
//为了组合该控件,所以在设计模式前子控件就被创建,而不在设计时输出控件。
if (this.Site != null && this.Site.DesignMode)
CreateChildControls();

base.Render(output);
}

/// <summary>
/// 重写CreateChildControls,建立内部子控件。
/// </summary>
protected override void CreateChildControls()
{
Controls.Clear();
ClearChildViewState();

BuildControlHierarchy();
}

/// <summary>
/// 此函数是外部调用该控件的唯一接口,
/// 当该函数被调用时开始构造文件目录树。
/// </summary>
public override void DataBind()
{
//触发基类的数据绑定事件
base.DataBind();

//在数据绑定之后必需要重新创建子控件,所以此时将它设为false.
this.ChildControlsCreated = false;

//显示数据
this.InitTree();
}

#endregion

#region private methods

/// <summary>
/// 建立控件及布局
/// </summary>
private void BuildControlHierarchy()
{
// 建一个2行4列的表格
Table t = new Table();
t.Font.Name = this.Font.Name;
t.Font.Size = this.Font.Size;
t.BorderStyle = this.BorderStyle;
t.BorderWidth = this.BorderWidth;
t.BorderColor = this.BorderColor;
t.Width = this.Width;
t.Height = this.Height;
t.BackColor = this.BackColor;
t.ForeColor = this.ForeColor;

//表格行变量
TableRow row;
//单元格变量
TableCell cell;

// 添加一个表格行(第1行)--------------
row = new TableRow();
row.VerticalAlign=VerticalAlign.Top;
row.Width=this.Width;
row.Height=Unit.Pixel(10);
t.Rows.Add(row);

// 增加‘订阅’按钮及单元格
cell = new TableCell();
this.lnbtnSubscription=new LinkButton();
this.lnbtnSubscription.ID="lnbtnSubscription";
this.lnbtnSubscription.ToolTip="订阅选中的目录";
this.lnbtnSubscription.Text="订阅";
this.lnbtnSubscription.Enabled =true;
this.lnbtnSubscription.Click+=new EventHandler(lnbtnSubscription_Click);
cell.Controls.Add(lnbtnSubscription);
row.Cells.Add(cell);

// 增加‘删除’按钮及单元格
cell = new TableCell();
this.lnbtnDelete=new LinkButton();
this.lnbtnDelete.ID="lnbtnDelete";
this.lnbtnDelete.ToolTip="删除选中的目录";
this.lnbtnDelete.Text="删除";
this.lnbtnDelete.Enabled =true;
this.lnbtnDelete.Click+=new EventHandler(lnbtnDelete_Click);
cell.Controls.Add(lnbtnDelete);
row.Cells.Add(cell);

// 增加‘增加目录’按钮及单元格
cell = new TableCell();
this.lnbtnAdd=new LinkButton();
this.lnbtnAdd.ID="lnbtnAdd";
this.lnbtnAdd.ToolTip="在选中的目录下增加一个目录";
this.lnbtnAdd.Text="增加目录";
this.lnbtnAdd.Enabled =true;
this.lnbtnAdd.Click+=new EventHandler(lnbtnAdd_Click);
cell.Controls.Add(lnbtnAdd);
row.Cells.Add(cell);

// 添加另一个表格行(第2行)--------------
row = new TableRow();
row.Width=this.Width;
row.Height=this.Height;
row.HorizontalAlign=HorizontalAlign.Left;
t.Rows.Add(row);

//增加一个单元格及TreeView控件
cell=new TableCell();
cell.VerticalAlign=VerticalAlign.Top;
cell.ColumnSpan=3;
cell.Width=this.Width;
cell.Height =row.Height;

this.trvFolder=new TreeView();
this.trvFolder.ID="trvFolder";
this.trvFolder.Enabled =true;
this.trvFolder.Visible =true;
this.trvFolder.Height=row.Height;
this.trvFolder.Width=row.Width;
this.trvFolder.ShowLines=true;
this.trvFolder.ShowPlus =true;
this.trvFolder.SelectExpands=true;
this.trvFolder.ShowToolTip =true;
this.trvFolder.ToolTip ="aaaa文件夹目录";
this.trvFolder.SelectedIndexChange+=new Microsoft.Web.UI.WebControls.SelectEventHandler(trvFolder_SelectedIndexChange);

cell.Controls.Add(trvFolder);
row.Cells.Add(cell);

// 把表格加入控件
this.Controls.Add(t);
}
...全文
207 点赞 收藏 31
写回复
31 条回复
goody9807 2004年07月07日
你按照我那样做 没问题的
回复 点赞
NoReady 2004年07月07日
goody9807() :已收到!
回复 点赞
xxdneu 2004年07月07日
兄弟,你应该加这么个函数
protected override void OnLoad(EventArgs e)
{
base.OnLoad();
DataBind();
}

你这个树要想出现,你得有节点才行,结果你把它放到了DataBind()函数里了,那么你的页面每次回发的时候你都得手动调用DataBind()才行,那不是麻烦吗,所以你就放到OnLoad里
回复 点赞
goody9807 2004年07月07日
发完了 OK
fengyuw@163.com
回复 点赞
NoReady 2004年07月07日
好的,谢谢,我这就查收去
回复 点赞
goody9807 2004年07月07日
发完了 OK
回复 点赞
NoReady 2004年07月07日
TO goody9807() 、redbb(....Dotneter....) :
我没有收到啊!
能不能发到fengyuw@163.com ?
请问2位的MSN是多少?我好向你们计教,我的是:fengyuwhw@hotmail.com
回复 点赞
goody9807 2004年07月07日
OK
回复 点赞
goody9807 2004年07月07日
发到hotmail吗
回复 点赞
NoReady 2004年07月07日
好的,谢谢各位,我马上查收
回复 点赞
goody9807 2004年07月07日
OK 成功了
我给你把 工程发过去
回复 点赞
elite2018 2004年07月07日
have sent my codes
回复 点赞
NoReady 2004年07月07日
我的代码运行没出错,只是treeview看不见,能不能用MSN啊?我的MSN:
fengyuwhw@hotmail.com
回复 点赞
NoReady 2004年07月07日
啊,QQ,我们不允许上的,我争取下看:)
回复 点赞
goody9807 2004年07月07日
我已经运行可以了 确实只有3个按钮
回复 点赞
goody9807 2004年07月07日
你的代码怎么运行不了

QQ 40276213
回复 点赞
NoReady 2004年07月07日
可是斑竹们好像都不在啊
回复 点赞
lengfeng8866 2004年07月07日
请斑竹来看看吧。。。期待你的问题的答案
回复 点赞
小贵子88 2004年07月07日
对WEB不熟,顶
回复 点赞
NoReady 2004年07月07日
问题解决了大半了,是关闭这个CASE的时间了,非常感觉各位的帮助,特别谢谢goody9807() ,花了足够的时间帮我,再次感谢!
回复 点赞
发动态
发帖子
.NET技术社区
创建于2007-09-28

4.9w+

社区成员

66.8w+

社区内容

.NET技术交流专区
社区公告
暂无公告