Author: husted
Date: Thu Nov 3 12:03:13 2005
New Revision: 330619
URL: http://svn.apache.org/viewcvs?rev=330619&view=rev
Log:
OVR-24
* Add Letter Filter control.
Added:
struts/sandbox/trunk/overdrive/Nexus/Web/Controls/
struts/sandbox/trunk/overdrive/Nexus/Web/Controls/LetterFilter.ascx
struts/sandbox/trunk/overdrive/Nexus/Web/Controls/LetterFilter.ascx.cs
struts/sandbox/trunk/overdrive/Nexus/Web/Controls/LetterFilter.ascx.resx
Modified:
struts/sandbox/trunk/overdrive/Nexus/Web/Web.csproj
Added: struts/sandbox/trunk/overdrive/Nexus/Web/Controls/LetterFilter.ascx
URL:
http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Web/Controls/LetterFilter.ascx?rev=330619&view=auto
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Web/Controls/LetterFilter.ascx (added)
+++ struts/sandbox/trunk/overdrive/Nexus/Web/Controls/LetterFilter.ascx Thu Nov
3 12:03:13 2005
@@ -0,0 +1,10 @@
+<%@ Control Language="c#" AutoEventWireup="false"
Codebehind="LetterFilter.ascx.cs" Inherits="Nexus.Web.Controls.LetterFilter"
TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
+<asp:repeater id="letters" runat="server">
+ <itemtemplate>
+ <asp:linkbutton id="letter" runat="server"
+ commandname="filter"
+ commandargument='<%# DataBinder.Eval(Container,
"DataItem.Letter")%>' >
+ <%# DataBinder.Eval(Container, "DataItem.Letter")%>
+ </asp:linkbutton>
+ </itemtemplate>
+</asp:repeater>
\ No newline at end of file
Added: struts/sandbox/trunk/overdrive/Nexus/Web/Controls/LetterFilter.ascx.cs
URL:
http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Web/Controls/LetterFilter.ascx.cs?rev=330619&view=auto
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Web/Controls/LetterFilter.ascx.cs
(added)
+++ struts/sandbox/trunk/overdrive/Nexus/Web/Controls/LetterFilter.ascx.cs Thu
Nov 3 12:03:13 2005
@@ -0,0 +1,288 @@
+using System;
+using System.Collections;
+using System.Data;
+using System.Web.UI.WebControls;
+using Nexus.Web;
+using WQD.Core.Controls;
+
+namespace Nexus.Web.Controls
+{
+ /// <summary>
+ /// Display a list of letters, one of which can be selected at a time,
+ /// so a client control can filter a list of entries.
+ /// </summary>
+ /// <remarks><p>
+ /// Adapted from http://www.codeproject.com/aspnet/LetterBasedPaging.asp
+ /// </p></remarks>
+ ///
+ public class LetterFilter : FindControl
+ {
+
+ /// <summary>
+ /// Document token representing match all entries.
+ /// </summary>
+ public const string ALL = "[*]";
+
+ /// <summary>
+ /// Document the attribute name for the initial letter by which
to filter.
+ /// </summary>
+ public const string ITEM_INITIAL = "initial";
+ /// <summary>
+
+ /// Provide a key under which to store the selected letter in
ViewState.
+ /// </summary>
+ ///
+ public const string LETTER_KEY = "_Letter";
+
+ /// <summary>
+ /// Document the wildcard character used by SQL queries.
+ /// </summary>
+ public const string WILDCARD = "%";
+
+ /// <summary>
+ /// Signal that input is ready to submit,
+ /// passing the ITEM_INTIIAL value as FindArgs.
+ /// </summary>
+ ///
+ public event EventHandler View_Filter;
+
+ /// <summary>
+ /// List the letters that can selected.
+ /// </summary>
+ ///
+ protected Repeater letters;
+
+ /// <summary>
+ /// Provide a private field to cache the LetterFilter property.
+ /// </summary>
+ ///
+ private string _Letter;
+
+ /// <summary>
+ /// Store the current letter by which client is to filter.
+ /// </summary>
+ /// <remarks><p>
+ /// The value is stored by ID in ViewState
+ /// so that more than one LetterFilter can be used by the same
parent control.
+ /// </p></remarks>
+ ///
+ public string Letter
+ {
+ get
+ {
+ if (_Letter == null) _Letter = ViewState[ID +
LETTER_KEY] as string;
+ return _Letter;
+ }
+ set
+ {
+ _Letter = value;
+ ViewState[ID + LETTER_KEY] = value;
+ // Bind the datasource so that Letter change is
reflected
+ letters.DataBind();
+ }
+ }
+
+ /// <summary>
+ /// Provide a key under which to store the DataTable in
ViewState.
+ /// </summary>
+ ///
+ private string LETTER_TABLE_KEY = "_LetterData";
+
+ /// <summary>
+ /// Provide a private field to cache the LetterTable property.
+ /// </summary>
+ ///
+ private DataTable _LetterTable;
+
+ /// <summary>
+ /// Store the DataTable containing our letters.
+ /// </summary>
+ ///
+ public DataTable LetterTable
+ {
+ get
+ {
+ if (_LetterTable == null) _LetterTable =
ViewState[ID + LETTER_TABLE_KEY] as DataTable;
+ return _LetterTable;
+ }
+ set
+ {
+ _LetterTable = value;
+ ViewState[ID + LETTER_TABLE_KEY] = value;
+ }
+
+ }
+
+ /// <summary>
+ /// Provide the name of the item command to fire when the
linkbutton for a letter is clicked.
+ /// </summary>
+ ///
+ protected const string FILTER_CMD = "filter";
+
+ /// <summary>
+ /// Identify the linkbutton that will contain the letter in
each repeater cell.
+ /// </summary>
+ ///
+ protected const string LETTER_ID = "letter";
+
+ /// <summary>
+ /// Identify the column in our DataTable that holds the
letters.
+ /// </summary>
+ ///
+ protected const string LETTER_COLUMN = "Letter";
+
+ /// <summary>
+ /// Handle the "Filter" by new letter command,
+ /// passing NULL if "ALL" is selected.
+ /// </summary>
+ ///
+ protected void letters_ItemCommand(object source,
RepeaterCommandEventArgs e)
+ {
+ // Handle the "Filter" new record command
+ if (e.CommandName == FILTER_CMD)
+ {
+ // Set the new Letter selection
+ Letter = (string) e.CommandArgument;
+
+ // Raise the "Filter" event so that client can
update its list.
+ if (View_Filter != null)
+ {
+ string letter = Letter;
+ if (ALL.Equals(letter)) letter = null;
+ string letter2 = letter + WILDCARD;
+ IDictionary criteria = new Hashtable(1);
+ criteria.Add(ITEM_INITIAL,letter2);
+ FindArgs a = new FindArgs(e, criteria);
+ View_Filter(source, a);
+ }
+ }
+ }
+
+ /// <summary>
+ /// Called when an item in the letters repeater control is data
bound to a source.
+ /// </summary>
+ protected void letters_ItemDataBound(object source,
RepeaterItemEventArgs e)
+ {
+ // Retrieve the row of data that is to be bound to the
repeater
+ DataRowView data = (DataRowView) e.Item.DataItem;
+
+ // If the letter we are binding to the current repeater
control item is
+ // the same as the one currently selected, than
disable it so the user
+ // knows which one was selected.
+ if ((string) data[0] == Letter)
+ {
+ LinkButton cmd = (LinkButton)
e.Item.FindControl(LETTER_ID);
+ cmd.Enabled = false;
+ }
+ }
+
+
+ /// <summary>
+ /// Create a new DataTable from the list of letters provided,
+ /// and store a referance to the newly create data table for
use on post back.
+ /// </summary>
+ /// <param name="input">List of letters to present as
commands</param>
+ private void LetterTable_Init(IList input)
+ {
+ DataTable dt = new DataTable();
+ dt.Columns.Add(new DataColumn(LETTER_COLUMN, typeof
(string)));
+
+ for (int i = 0; i < input.Count; i++)
+ {
+ DataRow dr = dt.NewRow();
+ dr[0] = input[i];
+ dt.Rows.Add(dr);
+ }
+
+ LetterTable = dt;
+ }
+
+ /// <summary>
+ /// Bind the letters array to the repeater control,
+ /// set the default letter,
+ /// so that the letters are ready to present.
+ /// </summary>
+ ///
+ public bool Open()
+ {
+ if (LetterTable == null)
+ {
+ // Default to A-Z
+ string[] input = {
+ "A",
"B", "C", "D", "E", "F", "G", "H", "I", "J",
+ "K",
"L", "M", "N", "O", "P", "Q", "R", "S", "T",
+ "U",
"V", "W", "X", "Y", "Z", ALL
+ };
+
+ LetterTable_Init(input);
+ }
+
+ letters.DataSource = LetterTable.DefaultView;
+ string current = Letter;
+ if (current == null) Letter = ALL;
+ return true;
+ }
+
+ /// <summary>
+ /// Bind the letters array to the repeater control,
+ /// set the default letter,
+ /// so that the letters are ready to present.
+ /// </summary>
+ ///
+ public bool Open(IList letters)
+ {
+ LetterTable_Init(letters);
+ return Open();
+ }
+
+
+ /// <summary>
+ /// Pass our DataGrid instance to base member.
+ /// </summary>
+ ///
+ private void Page_Init()
+ {
+ letters.ItemCommand += new
RepeaterCommandEventHandler(this.letters_ItemCommand);
+ letters.ItemDataBound += new
RepeaterItemEventHandler(this.letters_ItemDataBound);
+ }
+
+ /// <summary>
+ /// Handle the page Load event.
+ /// </summary>
+ /// <param name="sender">Event source</param>
+ /// <param name="e">Runtime parameters</param>
+ ///
+ private void Page_Load(object sender, EventArgs e)
+ {
+ Open();
+ }
+
+ #region Web Form Designer generated code
+
+ /// <summary>
+ /// Generated method for Designer support.
+ /// </summary>
+ /// <param name="e">Runtime parameters</param>
+ ///
+ protected override void OnInit(EventArgs e)
+ {
+ //
+ // CODEGEN: This call is required by the ASP.NET Web
Form Designer.
+ //
+ InitializeComponent();
+ base.OnInit(e);
+ Page_Init();
+ }
+
+ /// <summary>
+ /// Required method for Designer support - do not
modify
+ /// the contents of this method with the code
editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.Load += new EventHandler(this.Page_Load);
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
Added: struts/sandbox/trunk/overdrive/Nexus/Web/Controls/LetterFilter.ascx.resx
URL:
http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Web/Controls/LetterFilter.ascx.resx?rev=330619&view=auto
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Web/Controls/LetterFilter.ascx.resx
(added)
+++ struts/sandbox/trunk/overdrive/Nexus/Web/Controls/LetterFilter.ascx.resx
Thu Nov 3 12:03:13 2005
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<root>
+ <xsd:schema id="root" xmlns=""
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element
name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element
name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute
name="name" type="xsd:string" />
+ <xsd:attribute
name="type" type="xsd:string" />
+ <xsd:attribute
name="mimetype" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element
name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute
name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="ResMimeType">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="Version">
+ <value>1.0.0.0</value>
+ </resheader>
+ <resheader name="Reader">
+ <value>System.Resources.ResXResourceReader,
System.Windows.Forms, Version=1.0.5000.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="Writer">
+ <value>System.Resources.ResXResourceWriter,
System.Windows.Forms, Version=1.0.5000.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root>
Modified: struts/sandbox/trunk/overdrive/Nexus/Web/Web.csproj
URL:
http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Web/Web.csproj?rev=330619&r1=330618&r2=330619&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Web/Web.csproj (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Web/Web.csproj Thu Nov 3 12:03:13 2005
@@ -218,6 +218,22 @@
SubType = "Code"
BuildAction = "Compile"
/>
+ <File
+ RelPath = "Controls\LetterFilter.ascx"
+ SubType = "UserControl"
+ BuildAction = "Content"
+ />
+ <File
+ RelPath = "Controls\LetterFilter.ascx.cs"
+ DependentUpon = "LetterFilter.ascx"
+ SubType = "ASPXCodeBehind"
+ BuildAction = "Compile"
+ />
+ <File
+ RelPath = "Controls\LetterFilter.ascx.resx"
+ DependentUpon = "LetterFilter.ascx.cs"
+ BuildAction = "EmbeddedResource"
+ />
</Include>
</Files>
</CSHARP>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]