C# Sharepoint Web部件自定义工具部件

C# Sharepoint Web部件自定义工具部件,c#,asp.net,visual-studio-2010,sharepoint,web-parts,C#,Asp.net,Visual Studio 2010,Sharepoint,Web Parts,我在我的Web部件main.cs中添加了一个属性 public override ToolPart[] GetToolParts() { ToolPart[] toolparts = new ToolPart[4]; WebPartToolPart wptp = new WebPartToolPart(); CustomPropertyToolPart custom = new CustomPrope

我在我的Web部件main.cs中添加了一个属性

   public override ToolPart[] GetToolParts()

        {
            ToolPart[] toolparts = new ToolPart[4];
            WebPartToolPart wptp = new WebPartToolPart();
            CustomPropertyToolPart custom = new CustomPropertyToolPart();

            CalendarToolPart datumswahl = new CalendarToolPart("Coutdown Datum Wahl");

            toolparts[0] = datumswahl;
            toolparts[1] = custom;
            toolparts[2] = wptp;

            return toolparts;
        }
然后我构建了这个类toolpartClass.cs

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.ComponentModel;  
using System.Web;  
using System.Web.UI;  
using System.Web.UI.WebControls;  
using System.Web.UI.WebControls.WebParts;  
using Microsoft.SharePoint;  
using Microsoft.SharePoint.WebControls;  
using Microsoft.SharePoint.WebPartPages;  

namespace Custom_Toolpart.toolparttest  
{    
    class CalendarToolPart : ToolPart     
{  
        public Calendar datumWahl = null;  
        private void CalendarToolPart_Init(object sender, EventArgs e)  
        {  
            datumWahl = new Calendar();  
            datumWahl.ID = "datumWahl";  

            SyncChanges();  
        }  

        public CalendarToolPart(string strTitle)
        {
            this.Title = strTitle;
            this.Init += new EventHandler(CalendarToolPart_Init);
        }

        public override void ApplyChanges()
        {
            //base.ApplyChanges();
            EnsureChildControls();  
        }

        public override void SyncChanges()
        {
            EnsureChildControls();
        }

        protected override void CreateChildControls()
        {
            base.CreateChildControls();
            Controls.Add(datumWahl);
            this.ChildControlsCreated = true;   //?
        }
    }
我的问题是,我无法使用/调用toolpartClass.cs之外的日历

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.ComponentModel;  
using System.Web;  
using System.Web.UI;  
using System.Web.UI.WebControls;  
using System.Web.UI.WebControls.WebParts;  
using Microsoft.SharePoint;  
using Microsoft.SharePoint.WebControls;  
using Microsoft.SharePoint.WebPartPages;  

namespace Custom_Toolpart.toolparttest  
{    
    class CalendarToolPart : ToolPart     
{  
        public Calendar datumWahl = null;  
        private void CalendarToolPart_Init(object sender, EventArgs e)  
        {  
            datumWahl = new Calendar();  
            datumWahl.ID = "datumWahl";  

            SyncChanges();  
        }  

        public CalendarToolPart(string strTitle)
        {
            this.Title = strTitle;
            this.Init += new EventHandler(CalendarToolPart_Init);
        }

        public override void ApplyChanges()
        {
            //base.ApplyChanges();
            EnsureChildControls();  
        }

        public override void SyncChanges()
        {
            EnsureChildControls();
        }

        protected override void CreateChildControls()
        {
            base.CreateChildControls();
            Controls.Add(datumWahl);
            this.ChildControlsCreated = true;   //?
        }
    }
我要做的是,将所选日期提供给“toolpartUserControl.ascx.cs”(代码隐藏),在这里我要使用日期并在toolpart.ascx中显示结果

在toolpartUserControl.ascx.cs中使用“普通”添加的Web部件属性没有问题,如下所示

namespace Custom_Toolpart.toolparttest  

{  

    public partial class toolparttestUserControl : UserControl  

    {  

        public toolparttest WebPart { get; set; }  

        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected override void OnPreRender(EventArgs e)
        {

            base.OnPreRender(e);

            DateTime datumAuswahl1 = DateTime.Parse(Calendar1.SelectedDate.ToString("MM") + "/" + Calendar1.SelectedDate.ToString("dd") + "/" + Calendar1.SelectedDate.ToString("yyyy"));
            DateTime datumJetzt = DateTime.Now;

            TimeSpan mySpan = new TimeSpan(-24, 0, 0);
            datumJetzt = datumJetzt.Add(mySpan);


            TimeSpan laufzeit = datumAuswahl1 - datumJetzt;
            string ausgabeLaufzeit = string.Format("{0}", laufzeit.Days);

            int i = Convert.ToInt32(ausgabeLaufzeit);
            if (i >= 2)
            {
                lbl_6.Text = "Tage";
            }
            if (i == 1)
            {
                lbl_6.Text = "Tag";
            }
            if (i == 0)
            {
                lbl_6.Text = "Tage";
                lbl_hide.Visible = true;
                lbl_1.Visible = false;
                lbl_2.Visible = false;
                lbl_3.Visible = false;
                lbl_6.Visible = false;
            }

            lbl_2.Text = ausgabeLaufzeit;


            if (this.WebPart != null && this.WebPart.CountDown_Text != null)
            {
                lbl_1.Text = this.WebPart.CountDown_Text.ToString();
            }

            if (this.WebPart != null && this.WebPart.Event_Text != null)
            {
                lbl_3.Text = this.WebPart.Event_Text.ToString();
            }

            if (this.WebPart != null && this.WebPart.Header_Text != null)
            {
                lbl_4.Text = this.WebPart.Header_Text.ToString();
            }

            if (this.WebPart != null && this.WebPart.Main_Text != null)
            {
                lbl_5.Text = this.WebPart.Main_Text.ToString();
            }

            if (this.WebPart != null && this.WebPart.Link_Edit != null)
            {
                hyplnk_1.NavigateUrl = this.WebPart.Link_Edit.ToString();
            }

            if (this.WebPart != null && this.WebPart.Ablauf_Text != null)
            {
                lbl_hide.Text = this.WebPart.Ablauf_Text.ToString();
            }
        }
    }
}

如何将所选日期发送到toolpartUserControl.ascx.cs类?

您的问题是,需要在回发过程中将日期持久化到某种持久存储中。最常见的方法是在Web部件中定义一个持久属性,即WebBrowsable(false)、Personalizable(…)。之后,使用ParentToolPane从ToolPart访问Web部件的实例。在ApplyChanges中选择Web部件。@Roman Thx对于你的助手来说,持久性也是我的主意,但dindt知道如何解决。persistent属性没有问题,我现在正试图在toolpart中授予对实例的访问权。@Roman第三个提示,我将非常感谢:)您的主要目标是在回发中保留该值。您还可以使用ViewState btw,前提是该值仅在Toolpane打开时才有价值。在Asp.Net中,每个请求都会重新创建整个控件层次结构,因此您必须从某处获取以前的状态。