服务器控件,还是treeview的问题,急!
//这是所有的代码:
//-------------------------
/// <文件声明>
/// <重要等级>重要</重要等级>
/// <公司名称>杭州华讯通信科技有限公司</公司名称>
/// <项目组>文档库组件开发组</项目组>
/// </文件声明>
/// <文件描述>
/// 完成目录树的显示、创建、删除功能。
/// </文件描述>
/// <创建时间>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);
}