//----------------------------------------------------------------
//
//
//文件描述:
//
//创 建 人: jianyi0115@163.com
//创建日期: 2007-11-29
//
//修订记录: 
//
//----------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Reflection;
using System.Xml;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
//using Microsoft.SharePoint.Publishing;
using System.Reflection;
using CodeA.SharePoint.WebPartSkin;
using CodeA.SharePoint.EditParts;
namespace CodeA.SharePoint
{
    class ExtandViewToolBar : ViewToolBar
    {
        protected override void CreateChildControls()
        {
            base.CreateChildControls();
            ToolBar toolbarControl = (ToolBar)this.TemplateContainer.FindControl("toolBarTbl");
            if (toolbarControl != null)
            {
            }
        }
        public ToolBar InnerToolBar
        {
            get
            {
                this.EnsureChildControls();
ToolBar toolbarControl = (ToolBar)this.TemplateContainer.FindControl("toolBarTbl");
                return toolbarControl;
            }
        }
    }
     /// <summary>
    /// 具有skin加载能力的webpart基类
    /// </summary>
    /// 
    //[Designer(typeof(SkinWebPartDesigner))]
    public class ListViewWebPart : BaseSPListWebPart
    {
private IQueryConditionProvider _QueryConditionProvider;
        [ResConnectionConsumer("QueryCondition", "QueryConditionConsumer",
           AllowsMultipleConnections = true)]
        public void ConsumeQueryCondition(IQueryConditionProvider provider)
        {
            _QueryConditionProvider = provider;
            SetQuery();
        }
        private bool _ShowToolbar = false ;
        [Personalizable(PersonalizationScope.Shared)]
        [WebBrowsable]
        [ResWebDisplayName("ListViewWebPart_ShowToolbar")]
        public bool ShowToolbar
        {
            get { return _ShowToolbar; }
            set { _ShowToolbar = value; }
        }
        private string _ToolbarTemplateName;
        [Personalizable(PersonalizationScope.Shared)]
        [WebBrowsable]
        [WebDisplayName("工具栏模板")]
        public virtual string ToolbarTemplateName
        {
            get { return _ToolbarTemplateName; }
            set { _ToolbarTemplateName = value; }
        }
        private int _RowLimit = 0;
        /// <summary>
        /// 最多显示行数
        /// </summary>
        /// 
        [Personalizable(PersonalizationScope.Shared)]
        [WebBrowsable]
        [ResWebDisplayName("ListViewWebPart_RowLimit")]
        public int RowLimit
        {
            set { _RowLimit = value; }
            get { return _RowLimit; }
        }
        private bool _ShowViewList = false ;
        [Personalizable(PersonalizationScope.Shared)]
        [WebBrowsable]
        [ResWebDisplayName("ListViewWebPart_ShowViewList","显示视图列表")]
        public  virtual bool ShowViewList
        {
            get { return _ShowViewList; }
            set { _ShowViewList = value; }
        }
        /// <summary>
        /// 是否使用已经存在的视图,而不是新建单独的视图
        /// </summary>
        private bool _UseExistView = true;
        [Personalizable(PersonalizationScope.Shared)]
        [WebBrowsable(false)]
        public bool UseExistView
        {
            get {  return _UseExistView; }
            set { _UseExistView = value; }
        }
        private Guid _RelationViewID;
        /// <summary>
        /// 关联的视图--有本控件创建
        /// </summary>
        [Personalizable(PersonalizationScope.Shared)]
        [WebBrowsable(false)]
        public Guid RelationViewID
        {
            get { return _RelationViewID; }
            set { _RelationViewID = value; }
        }
        private string _RootFolder;
        [Personalizable(PersonalizationScope.Shared)]
        [WebBrowsable(true)]
        public string RootFolder
        {
            get { return _RootFolder; }
            set { _RootFolder = value; }
        }
        // private bool _AutoGenerateEmptyRows = true;
        /// <summary>
        /// 当实际行数不足时(行数小于MaxRowCount),是否自动生成空行
        /// </summary>
        /// 
        //[Localizable(true)]
        //[Personalizable(PersonalizationScope.Shared)]
        //[WebBrowsable]
        //[ResWebDisplayName("ListViewWebPart_AutoGenerateEmptyRows")]
        //public bool AutoGenerateEmptyRows
        //{
        //    set { _AutoGenerateEmptyRows = value; }
        //    get { return _AutoGenerateEmptyRows; }
        //}        
        protected string GetBodySkinKey()
        {
            return this.TemplateID + "_body";
        }               
        private ViewToolBar _toolbar;
        public ViewToolBar ToolbarControl
        {
            get
            { 
                if (this._toolbar != null)
                {
                    return this._toolbar;
                }
SPList list = this.GetCurrentSPList();
if (list == null) return null;
SPView view = this.CurrentView;
                 if (view == null) return null;
                
                //SPWeb web = this.GetCurrentSPWeb();
                //(HttpContext context, Guid viewId, Guid listId, SPWeb web);
                SPContext context = SPContext.GetContext( base.Context , view.ID , list.ID , list.ParentWeb )  ;
                //context.ViewContext.View = view;
                //context.ViewContext.ViewType = this.ViewType;
                //context.ViewContext.Qualifier = base.Qualifier;
                this._toolbar = new ExtandViewToolBar();
                this._toolbar.ID = this.ID + "_ExtandViewToolBar1";
                this._toolbar.RenderContext = context;
                this._toolbar.EnableViewState = false;
                if (!String.IsNullOrEmpty(ToolbarTemplateName))
                {
                    this._toolbar.TemplateName = this.ToolbarTemplateName;
                }
                else if (!String.IsNullOrEmpty(view.ToolbarTemplateName))
                {
                    this._toolbar.TemplateName = view.ToolbarTemplateName;
                }
                     
                return this._toolbar;
            }
        }          
 
        void HiddenToolbar(XmlDocument doc)
        {
            XmlNode toolNode = doc.DocumentElement.SelectSingleNode("Toolbar");
             if (toolNode != null)
                doc.DocumentElement.RemoveChild(toolNode);
        }
        
        void ProcessToolbarSchema(XmlDocument doc )
        {
            XmlNode toolNode = doc.DocumentElement.SelectSingleNode("Toolbar");
            if (this.ShowToolbar)
            {
                if (toolNode == null)
                {
                    toolNode = doc.CreateElement("Toolbar");
                    XmlAttribute att = doc.CreateAttribute("Type");
                    att.Value = "Standard";
                    toolNode.Attributes.Append(att);
                    doc.DocumentElement.AppendChild(toolNode);
                }
                else
                {
                    toolNode.InnerXml = "";
                    toolNode.Attributes["Type"].Value = "Standard" ;
                }
            }
            else
            {
                if (toolNode != null)
                    doc.DocumentElement.RemoveChild(toolNode);
            }
        }
        protected Microsoft.SharePoint.WebPartPages.ListViewWebPart ContentList = null ;
        protected LiteralControl ContentHtml;
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            this.EnsureChildControls();
        }
        private XmlDocument _ListViewXml;
        void SetQuery()
        {
            this.EnsureChildControls();
            if (ContentList != null)
            {
                //ProcessToolbarSchema(doc);
                if (this._QueryConditionProvider != null && !String.IsNullOrEmpty(this._QueryConditionProvider.QueryCondition.Query))
                {
                    SPUtil.ChangeSchemaXmlQuery(_ListViewXml, this._QueryConditionProvider.QueryCondition.Query);
                }
                ContentList.ListViewXml = _ListViewXml.InnerXml ;
            }
        }
        public void ReCreateChildControls()
        {
            CreateChildControls();
        }
        /// <summary>
        /// 内容控件是否被创建
        /// </summary>
        public bool ContentCreated = false;
        protected override void CreateChildControls()
        {
            //if (this.ChildControlsCreated) return;        
this.Controls.Clear();
base.CreateChildControls();
            if (List == null)
            {
                base.RegisterShowToolPanelControl("请", "打开工具窗格", ",设置“列表名称”。");
                return;
            }
bool htmlCreated = CreateContentHtml(true);
            if (!htmlCreated)
                CreateContentList(true); 
        }
        protected virtual bool CreateContentHtml( bool createToolbar )
        {
            if (!String.IsNullOrEmpty(this.TemplateID)) //指定皮肤 
            {             
                SkinElement el = GetSkin();
                if (el != null && !String.IsNullOrEmpty(el.Body))
                {
                    if ( createToolbar && this.ShowToolbar && this.ToolbarControl != null)
                    {
                        this.Controls.Add(this.ToolbarControl);
                    }
                    ContentHtml = new LiteralControl();
                    ContentHtml.ID = this.ID + "_ContentHtml";
                    ContentHtml.Text = this.GetContentHtml(el.Body);
                    this.Controls.Add(ContentHtml);
                    this.ContentCreated = true;
                    return true;
                }
            }
            return false;
        }
        protected virtual void CreateContentList(bool createToolbar)
        {
            SPView view = this.CurrentView;
if (view == null) return;
            //if (!String.IsNullOrEmpty(ToolbarTemplateName))
            //{
            //    view.ToolbarTemplateName = this.ToolbarTemplateName;
            //}
            ContentList = new Microsoft.SharePoint.WebPartPages.ListViewWebPart();
            ContentList.ID = this.ID + "ContentList";
            ContentList.Title = this.Title;
            ContentList.ListName = List.ID.ToString("B").ToUpper();
            if ( ShowViewList && createToolbar )
                ContentList.ViewGuid = view.ID.ToString("B").ToUpper();
            //给ViewGuid赋值时,会显示出视图选择菜单
            _ListViewXml = new XmlDocument();
            _ListViewXml.LoadXml(view.HtmlSchemaXml);
            if (this.ShowToolbar == false || createToolbar == false)
                this.HiddenToolbar(_ListViewXml);
ContentList.ListViewXml = _ListViewXml.InnerXml;
ContentList.EnableViewState = true;
//ContentList.FrameType = Microsoft.SharePoint.WebPartPages.FrameType.None;
ContentList.ChromeType = PartChromeType.None; //不显示标题
            if (!String.IsNullOrEmpty(ToolbarTemplateName))
            {
                foreach (Control ctl in ContentList.Controls)
                {
                    if (ctl is ViewToolBar)
                    {
                        ViewToolBar bar = (ViewToolBar)ctl;
                        bar.TemplateName = this.ToolbarTemplateName;
                        //bar.AlternateTemplateName = this.ToolbarTemplateName;
                        break;
                    }
                }
            }
            this.Controls.Add(ContentList);
            this.ContentCreated = true;
        }
        protected virtual void RenderToolbar(HtmlTextWriter writer)
        {
            if (this.ShowToolbar && this.ToolbarControl != null)
                this.ToolbarControl.RenderControl(writer);
        }        
               
        private string GetContentHtml(string skin)
        {
            StringBuilder html = new StringBuilder();
            try
            {
                SPList list = base.GetCurrentSPList();
                if (list == null)
                {
                    return "";
                }
string skinKey = GetBodySkinKey();
SPListItemCollection items = null;
SPView view = base.CurrentView ;
SPQuery q = new SPQuery(view);
                if (this._QueryConditionProvider != null)
                {
                    q.Query = this._QueryConditionProvider.QueryCondition.Query;
                }
                if (RowLimit > 0)
                    q.RowLimit = (uint)this.RowLimit;
q.ViewFields = "";
                if (!String.IsNullOrEmpty(_RootFolder))
                {
                    SPFolder folder = base.Web.GetFolder(_RootFolder);
                    if (folder != null)
                        q.Folder = folder;
                }
                else
                {
string rootFolder = Page.Request.QueryString["RootFolder"];
                    if (rootFolder != null && rootFolder != "")
                    {
                        SPFolder folder = base.Web.GetFolder(rootFolder);
                        if (folder != null)
                            q.Folder = folder;
                    }
}
items = list.GetItems(q);
int rowNumber = 0;
IList<ReplaceTag> tags = ReplaceTagManager.GetInstance().GetReplaceTags(skinKey, skin);
                ITagValueProvider listValueProvider = new SPListValueProvider(list);
                ITagValueProvider wpValueProvider = new WebPartValueProvider(this);
                foreach (SPListItem item in items)
                {
                    StringBuilder sb = new StringBuilder(skin);
rowNumber++;
string v;
ITagValueProvider fieldValueProvider = new SPListItemValueProvider(item, rowNumber);
                    foreach (ReplaceTag tag in tags)
                    {
                        if (tag.ValueProvider == "spfield")
                            sb.Replace(tag.TagValue, fieldValueProvider.GetValue(tag));
                        else if (tag.ValueProvider == "splist")
                            sb.Replace(tag.TagValue, listValueProvider.GetValue(tag));
                        else if (tag.ValueProvider == "webpart")
                            sb.Replace(tag.TagValue, wpValueProvider.GetValue(tag));
                    }
                    html.Append(sb.ToString());
                }
                return html.ToString();
            }
            catch (Exception ex)
            {
                base.RegisterError(ex);
                return "" ;
            }
        } 
        public override EditorPartCollection CreateEditorParts()
        {
            ArrayList editorArray = new ArrayList();
            ViewEditorPart edPart = new ViewEditorPart();
            edPart.ID = "ViewEditorPart1";
            editorArray.Add(edPart);  
EditorPartCollection initEditorParts = base.CreateEditorParts();
EditorPartCollection editorParts = new EditorPartCollection(initEditorParts, editorArray);
            return editorParts;
        }
    }
}
 
                    
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号