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;
        }
    }
}



代码下载

posted on 2008-02-19 17:39  大鱼  阅读(242)  评论(0编辑  收藏  举报