⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sorter.cs

📁 一个ASP.NET下的中文内容管理和社区系统
💻 CS
字号:

namespace ASPNET.StarterKit.Communities {
    using System;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Collections;
    using System.ComponentModel;
    using System.Collections.Specialized;


    //*********************************************************************
    //
    // Sorter Class
    //
    // A control for sorting content. Displays list of columns to sort by.
    // Allowable Sort Columns:
    //
    //  * Date Created
    //  * View Count
    //  * Rating
    //  * Title
    //  * Date Commented
    //  * Date Updated
    //  * Author
    //  * Default
    //  * Topic
    //
    //  NOTE: The sorter will automatically remove Rating and Topic
    //  if these are disabled for this section. Be aware that
    //  it performs a case-sensitive comparison.
    //
    //*********************************************************************

    
    [
        ParseChildren(false),
        ControlBuilder(typeof(SorterControlBuilder)),
    	Designer(typeof(ASPNET.StarterKit.Communities.CommunityDesigner))  
    ]
    public class Sorter : WebControl, IPostBackDataHandler  {

        public event EventHandler OrderChanged;


        ListItemCollection _items = new ListItemCollection();


        string _ascendingText = "Ascending";
        string _descendingText = "Descending";
        bool _flipSortOrder = false;        



        //*********************************************************************
        //
        // FlipSortOrder Property
        //
        // If true, the order of ascending and descending is reversed.
        //
        //********************************************************************        
        public bool FlipSortOrder {
            get { return _flipSortOrder; }
            set { _flipSortOrder = value; }
        }


        //*********************************************************************
        //
        // AscendingText Property
        //
        // The text displayed for sorting ascending.
        //
        //********************************************************************        
        public string AscendingText {
            get { return _ascendingText; }
            set { _ascendingText = value; }
        }
        

        //*********************************************************************
        //
        // DescendingText Property
        //
        // The text displayed for sorting descending.
        //
        //********************************************************************        
        public string DescendingText {
            get { return _descendingText; }
            set { _descendingText = value; }
        }
        


        //*********************************************************************
        //
        // SelectedSortOrder Property
        //
        // The selected sort order (combines SortColumn and SortOrder).
        //
        //********************************************************************        
        public string SelectedSortOrder {
            get { return SortColumnValue + " " + SortOrderValue.Trim();}
        }


        //*********************************************************************
        //
        // SortColumnValue Property
        //
        // The value of the selected sort value column.
        //
        //********************************************************************        
        public string SortColumnValue {
            get {
                if (ViewState["SortColumn"] == null)
                    return _items[0].Value;
                else
                    return (string)ViewState["SortColumn"];
            }
            set { ViewState["SortColumn"] = value; }
        }


        //*********************************************************************
        //
        // SortOrderValue Property
        //
        // The value of the selected sort order column.
        //
        //********************************************************************        
        public string SortOrderValue {
            get {
                if (ViewState["SortOrder"] == null)
                    return _flipSortOrder ? "asc" : "desc";
                else
                    return (string)ViewState["SortOrder"];
            }
            set { ViewState["SortOrder"] = value; }
        }



        //*********************************************************************
        //
        // SortColumnOptionHelper Method
        //
        // Helper method for retrieving options.
        //
        //********************************************************************        
         private string SortColumnOptionHelper(ListItem item) {
            if (String.Compare(item.Value, SortColumnValue) == 0)
                return String.Format("<option value=\"{0}\" selected=\"selected\">{1}</option>", item.Value, item.Text);
            else
                return String.Format("<option value=\"{0}\">{1}</option>", item.Value, item.Text);
        }


        //*********************************************************************
        //
        // SortOrderOptionHelper Method
        //
        // Helper method for retrieving options.
        //
        //********************************************************************        
         private string SortOrderOptionHelper(string itemText, string itemValue) {
            if (String.Compare(itemValue, SortOrderValue) == 0)
                return String.Format("<option value=\"{0}\" selected=\"selected\">{1}</option>", itemValue, itemText);
            else
                return String.Format("<option value=\"{0}\">{1}</option>", itemValue, itemText);
        }



        //*********************************************************************
        //
        // SortColumnHelperID Property
        //
        // Helper property that returns an ID for the SortColumn dropdownlist.
        //
        //********************************************************************        
        private string SortColumnHelperID {
            get { return UniqueID + "_sc"; }
        }
        


        //*********************************************************************
        //
        // SortOrderHelperID Property
        //
        // Helper property that returns an ID for the SortOrder dropdownlist.
        //
        //*******************************************************************
        private string SortOrderHelperID {
            get { return UniqueID + "_so"; }
        }



        //*********************************************************************
        //
        // OnChangeHelper Property
        //
        // Helper property that returns javascript for the dropdownlists.
        //
        //*******************************************************************
        private string OnChangeHelper {
            get { return "javascript:" + Page.GetPostBackEventReference(this); }
        }

        

        //*********************************************************************
        //
        // OnPreRender Method
        //
        // We need to get notified of postback changes in the dropdownlist data.
        //
        //*******************************************************************
        protected override void OnPreRender(EventArgs e) {
            Page.RegisterRequiresPostBack(this);
        }
        


        //*********************************************************************
        //
        // Render Method
        //
        // If the skin doesn't have any list items, don't show anything.
        //
        //*******************************************************************        
        protected override void Render(HtmlTextWriter writer) {
            if (_items.Count > 0)
                base.Render(writer);
        }


        //*********************************************************************
        //
        // RenderContents Method
        //
        // Render the two dropdownlists.
        //
        //*******************************************************************
        protected override void RenderContents(HtmlTextWriter writer) {
            // open tr tag
            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            
            RenderSortColumn(writer);
            RenderSortOrder(writer);
            
            writer.RenderEndTag();
        }
        
 
        //*********************************************************************
        //
        // RenderSortColumn Method
        //
        // Render the sort column dropdownlist.
        //
        //*******************************************************************
        private void RenderSortColumn(HtmlTextWriter writer) {
            // Get the SectionInfo from context
            SectionInfo objSectionInfo = (SectionInfo)Context.Items["SectionInfo"];
            
            // Remove Topic when topic is disabled
            ListItem deleteItem;
            if (!objSectionInfo.EnableTopics) {
                deleteItem = _items.FindByValue( "Topic" );
                if (deleteItem != null)
                    _items.Remove(deleteItem);
            }

            // Remove Rating when rating disabled
            if (!objSectionInfo.EnableRatings) {
                deleteItem = _items.FindByValue( "Rating" );
                if (deleteItem != null)
                    _items.Remove(deleteItem);
            }


            // open cell
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            
            // Open select
            writer.AddAttribute(HtmlTextWriterAttribute.Name, SortColumnHelperID);
            writer.AddAttribute(HtmlTextWriterAttribute.Onchange, OnChangeHelper);
            writer.RenderBeginTag(HtmlTextWriterTag.Select);
            
            // display each list item
            foreach (ListItem item in _items) {
                writer.Write(SortColumnOptionHelper(item));
            }
        
            // close select
            writer.RenderEndTag();
        
            // close cell
            writer.RenderEndTag();
        }


 
        //*********************************************************************
        //
        // RenderSortOrder Method
        //
        // Render the two sort order dropdownlists.
        //
        //*********************************************************************
        private void RenderSortOrder(HtmlTextWriter writer) {
            // open cell
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            
            // Open select
            writer.AddAttribute(HtmlTextWriterAttribute.Name, SortOrderHelperID);
            writer.AddAttribute(HtmlTextWriterAttribute.Onchange, OnChangeHelper);
            writer.RenderBeginTag(HtmlTextWriterTag.Select);
        
            // Render Ascending/Descending
            
            if (_flipSortOrder) {
                writer.WriteLine(SortOrderOptionHelper(_ascendingText, "asc"));
                writer.WriteLine(SortOrderOptionHelper(_descendingText, "desc"));
            } else {
                writer.WriteLine(SortOrderOptionHelper(_descendingText, "desc"));
                writer.WriteLine(SortOrderOptionHelper(_ascendingText, "asc"));
            }
            
            // close select
            writer.RenderEndTag();
        
            // close cell
            writer.RenderEndTag();
        }

        
        
        //*********************************************************************
        //
        // AddParsedSubObject Method
        //
        // Ignore everything in my controls collection except listitems.
        //
        //*********************************************************************
        protected override void AddParsedSubObject(Object obj) {
           if (obj is ListItem) {
              _items.Add((ListItem)obj);
           }
        }


        //*********************************************************************
        //
        // LoadPostData Method
        //
        // Update the values of the dropdownlists after postback.
        // If there has been a value change, raise the OrderChanged event.
        //
        //*********************************************************************
        public bool LoadPostData(String postDataKey, NameValueCollection values) {
           string newSortColumnValue = values[SortColumnHelperID];
           string newSortOrderValue = values[SortOrderHelperID];
           
           if (newSortColumnValue != SortColumnValue || newSortOrderValue != SortOrderValue) {
                SortColumnValue = newSortColumnValue;
                SortOrderValue = newSortOrderValue;
                return true;
           } else
                return false;
        }


        //*********************************************************************
        //
        // RaisePostDataChanged Method
        //
        // This method is automatically fired off when the previous method
        // returns true.
        //
        //*********************************************************************
        public void RaisePostDataChangedEvent() {
            OnOrderChanged(EventArgs.Empty);
        }


        //*********************************************************************
        //
        // OnOrderChanged Method
        //
        // This method is called when the sort order changes.
        //
        //*********************************************************************
        public virtual void OnOrderChanged(EventArgs e) {
            if (OrderChanged != null)
                OrderChanged(this, e);
        }


        //*********************************************************************
        //
        // Sorter Constructor
        //
        // This control is based on an HTML table.
        //
        //*********************************************************************
        public Sorter() : base(HtmlTextWriterTag.Table) {
        }


    }
    
    //*********************************************************************
    //
    // SorterControlBuilder Class
    //
    // Enables listitems without the opening asp: to be parsed.
    //
    //*********************************************************************
    public class SorterControlBuilder : ControlBuilder {

       public override Type GetChildControlType(String tagName, IDictionary attributes) {

          if (String.Compare(tagName, "ListItem", true) == 0 || String.Compare(tagName, "asp:ListItem", true) == 0) {
             return typeof(ListItem);
          }

          return null;
       }
    }
    
    
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -