Defines custom tool parts that display a customized user interface for defining the properties of a Web Part inside of the tool pane.
自定义TOOLPART 提供一个编辑WEB部件属性的接口。
TOOLPART的生命周期如下:
OnInit 初始化,加载相关配置文件 (如WebPart任务面板上的属性,样式等配置信息)
LoadViewState 返回先前最后一次被处理的状态 (如webpart是展现,隐藏还是关闭)
CreateChildControls 创建WebPart UI ,通过Controls.Add()方法装载Web 控件
(Note:当Webpart是第一次展现的时候CreateChildControls方法发生在OnLoad方法之前,而经过一次postback之后,它发生在OnLoad方法之后)
OnLoad 从数据库或者其他系统重新获取要展现的数据 (如获取数据库连接)
User-Generated Events 响应用户生成事件 (如Button Click)
RendenContents 生成 html output,实现最终的UI展现 (由HTMLTextWriter class 来实现)
SaveViewState 保存控件状态 (ViewState 被序列化之后保存在一个hidden field 里)
Dispose 从内存中移除对象,释放临界资源 (如释放数据库连接)
OnUnLoad 最终完成内存清除工作
TOOLPART效果图:
TOOLPART代码:
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.Data;
namespace TestDownList
{
public class TestDownListCustom : Microsoft.SharePoint.WebPartPages.ToolPart
{
private DropDownList ddlModel = new DropDownList();
private DropDownList ddlModelType = new DropDownList();
public TestDownListCustom()
{
this.Title = "用户自定义参数";
}
protected override void RenderToolPart(HtmlTextWriter output)
{
//base.RenderToolPart(output);
output.WriteLine("<br>类型:<br>");
ddlModel.RenderControl(output);
output.WriteLine("<br>子类型:<br>");
ddlModelType.RenderControl(output);
}
protected override void CreateChildControls()
{
base.CreateChildControls();
//if (!this.Page.IsPostBack)
//{
ddlModel.AutoPostBack = true;
ddlModel.SelectedIndexChanged += new EventHandler(ddlModel_SelectedIndexChanged);
ddlModelType.AutoPostBack = true;
ddlModelType.SelectedIndexChanged += new EventHandler(ddlModelType_SelectedIndexChanged);
DataTable dt = new DataTable();
dt.Columns.Add("ModelName", typeof(System.String));
dt.Columns.Add("ModelID", typeof(System.String));
DataRow dw = dt.NewRow();
dw[0] = "one";
dw[1] = "one";
dt.Rows.Add(dw);
dw = dt.NewRow();
dw[0] = "two";
dw[1] = "two";
dt.Rows.Add(dw);
if (dt.Rows.Count > 0)
{
ddlModel.DataSource = dt;
ddlModel.DataTextField = dt.Columns["ModelName"].ToString();
ddlModel.DataValueField = dt.Columns["ModelID"].ToString();
ddlModel.DataBind();
ddlModel.Items.Insert(0, new ListItem("-请选择-", ""));
// ddlModel.SelectedValue = ((TestDownList)this.ParentToolPane.SelectedWebPart).Model;
}
else
{
ddlModel.Items.Clear();
ddlModel.Items.Add(new ListItem("没有相关栏目", ""));
}
//新闻类型选择下拉列表
dt = new DataTable();
dt.Columns.Add("NewsKindName", typeof(System.String));
dt.Columns.Add("NewsKindID", typeof(System.String));
if (ddlModel.SelectedValue != null)
{
dw = dt.NewRow();
dw[0] = "model选择类型:" + ddlModel.SelectedValue;
dw[1] = ddlModel.SelectedValue;
dt.Rows.Add(dw);
}
if (((TestDownList)this.ParentToolPane.SelectedWebPart).Model != null)
{
if (ddlModel.SelectedValue.Equals(""))
{
dw = dt.NewRow();
dw[0] = "没数据";
dw[1] = "没数据";
dt.Rows.Add(dw);
}
else
{
if (((TestDownList)this.ParentToolPane.SelectedWebPart).Model == "one")
{
dw = dt.NewRow();
dw[0] = "one数据1";
dw[1] = "one数据1";
dt.Rows.Add(dw);
dw = dt.NewRow();
dw[0] = "one数据2";
dw[1] = "one数据2";
dt.Rows.Add(dw);
}
else
{
dw = dt.NewRow();
dw[0] = "two数据1";
dw[1] = "two数据1";
dt.Rows.Add(dw);
dw = dt.NewRow();
dw[0] = "two数据2";
dw[1] = "two数据2";
dt.Rows.Add(dw);
}
}
}
else
{
}
if (dt.Rows.Count > 0)
{
ddlModelType.DataSource = dt;
ddlModelType.DataTextField = dt.Columns["NewsKindName"].ToString();
ddlModelType.DataValueField = dt.Columns["NewsKindID"].ToString();
ddlModelType.DataBind();
ddlModelType.Items.Insert(0, new ListItem("-请选择-", ""));
}
else
{
ddlModelType.Items.Clear();
ddlModelType.Items.Add(new ListItem("没有相关类型", ""));
}
Controls.Add(ddlModel);
Controls.Add(ddlModelType);
//}
}
public override void ApplyChanges()
{
((TestDownList)this.ParentToolPane.SelectedWebPart).Model = this.ddlModel.SelectedValue;
((TestDownList)this.ParentToolPane.SelectedWebPart).ModelType = this.ddlModelType.SelectedValue;
}
private void ddlModel_SelectedIndexChanged(object sender, EventArgs e)
{
((TestDownList)this.ParentToolPane.SelectedWebPart).Model = this.ddlModel.SelectedValue;
DataTable dt = new DataTable();
dt.Columns.Add("NewsKindName", typeof(System.String));
dt.Columns.Add("NewsKindID", typeof(System.String));
if (ddlModel.SelectedValue != null)
{
if (ddlModel.SelectedValue.Equals(""))
{
DataRow dw = dt.NewRow();
dw[0] = "没数据";
dw[1] = "没数据";
dt.Rows.Add(dw);
}
else
{
if (ddlModel.SelectedValue == "one")
{
DataRow dw = dt.NewRow();
dw[0] = "one数据1";
dw[1] = "one数据1";
dt.Rows.Add(dw);
dw = dt.NewRow();
dw[0] = "one数据2";
dw[1] = "one数据2";
dt.Rows.Add(dw);
}
else
{
DataRow dw = dt.NewRow();
dw[0] = "two数据1";
dw[1] = "two数据1";
dt.Rows.Add(dw);
dw = dt.NewRow();
dw[0] = "two数据2";
dw[1] = "two数据2";
dt.Rows.Add(dw);
}
}
}
ddlModelType.Items.Clear();
if (dt.Rows.Count > 0)
{
ddlModelType.DataSource = dt;
ddlModelType.DataTextField = dt.Columns["NewsKindName"].ToString();
ddlModelType.DataValueField = dt.Columns["NewsKindID"].ToString();
ddlModelType.DataBind();
ddlModelType.Items.Insert(0, new ListItem("-请选择-", ""));
}
else
{
ddlModelType.Items.Clear();
ddlModelType.Items.Add(new ListItem("没有相关类型", ""));
}
}
private void ddlModelType_SelectedIndexChanged(object sender, EventArgs e)
{
((TestDownList)this.ParentToolPane.SelectedWebPart).ModelType = ddlModelType.SelectedValue;
}
}
}