?? sorter.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 + -