You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

279 lines
9.3 KiB

using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing.Design;
using System.Web.UI.Design;
using System.ComponentModel.Design;
namespace OT.Controls.Toolbar
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:Toolbar runat=server></{0}:Toolbar>")]
public class Toolbar : WebControl, INamingContainer, IPostBackEventHandler
{
private ToolbarItemCollection FItems = null;
#region " ViewState 狀態管理 "
/// <summary>
/// 由 ViewState 還原控制項的狀態。
/// </summary>
/// <param name="savedState">要還原的控制項狀態。</param>
protected override void LoadViewState(object savedState)
{
if ((savedState != null))
{
// Load State from the array of objects that was saved at ;
// SavedViewState.
object[] myState = (object[])savedState;
if ((myState[0] != null))
{
base.LoadViewState(myState[0]);
}
if ((myState[1] != null))
{
FItems = (ToolbarItemCollection)myState[1];
}
}
}
/// <summary>
/// 控制項的狀態儲存至 ViewState。
/// </summary>
/// <returns>含有控制項之目前檢視狀態的物件。</returns>
protected override object SaveViewState()
{
object baseState = base.SaveViewState();
object[] myState = new object[2];
myState[0] = baseState;
myState[1] = this.Items;
return myState;
}
#endregion
#region " Click 事件 "
/// <summary>
/// Click 事件引數。
/// </summary>
public class ClickEventArgs : System.EventArgs
{
private string FKey = string.Empty;
/// <summary>
/// 項目鍵值。
/// </summary>
public string Key
{
get { return FKey; }
set { FKey = value; }
}
}
/// <summary>
/// 按下工具列按鈕所引發的事件。
/// </summary>
[Description("按下工具列按鈕所引發的事件。")]
public event ClickEventHandler Click;
public delegate void ClickEventHandler(object sender, ClickEventArgs e);
/// <summary>
/// 引發 Click 事件。
/// </summary>
protected virtual void OnClick(object sender, ClickEventArgs e)
{
if (Click != null)
{
Click(this, e);
}
}
#endregion
/// <summary>
/// 工具列項目集合。
/// </summary>
[Description("工具列項目集合。"), PersistenceMode(PersistenceMode.InnerProperty), DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Editor(typeof(ToolbarItemCollectionEditor), typeof(UITypeEditor))]
public ToolbarItemCollection Items
{
get
{
if (FItems == null)
{
FItems = new ToolbarItemCollection();
}
return FItems;
}
}
/// <summary>
/// 覆寫 RenderContents 方法。
/// </summary>
protected override void RenderContents(System.Web.UI.HtmlTextWriter writer)
{
Control oControl = null;
this.Controls.Clear();
foreach (ToolbarItem oItem in this.Items)
{
if (oItem is ToolbarButton)
{
//建立 Button 控制項
oControl = CreateToolbarButton((ToolbarButton)oItem);
}
else if (oItem is ToolbarTextbox)
{
//建立 Textbox 控制項
oControl = CreateToolbarTextbox((ToolbarTextbox)oItem);
}
else
{
//建立 Label 控制項
oControl = CreateToolbarLabel((ToolbarLabel)oItem);
}
this.Controls.Add(oControl);
}
base.RenderContents(writer);
}
protected override void RenderChildren(HtmlTextWriter writer)
{
base.RenderChildren(writer);
}
public override void RenderControl(HtmlTextWriter writer)
{
base.RenderControl(writer);
}
public override void RenderBeginTag(HtmlTextWriter writer)
{
base.RenderBeginTag(writer);
}
public override void RenderEndTag(HtmlTextWriter writer)
{
base.RenderEndTag(writer);
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
base.AddAttributesToRender(writer);
}
protected override void AddedControl(Control control, int index)
{
base.AddedControl(control, index);
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
}
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
}
/// <summary>
/// 建立工具列按鈕。
/// </summary>
private Control CreateToolbarButton(ToolbarButton Item)
{
System.Web.UI.HtmlControls.HtmlButton oButton = new System.Web.UI.HtmlControls.HtmlButton();
string sScript = null;
oButton.InnerText = Item.Text;
oButton.Disabled = !Item.Enabled;
oButton.Visible = Item.Visible;
oButton.CausesValidation = Item.CausesValidation;
oButton.ID = Item.Key;
oButton.Attributes.Add("class", Item.CssClass);
oButton.Attributes.Add("ShowWaiting", ""); //Add By Ted 2014/07/31 自定義屬性套用等待畫面效果
//oButton.ConfirmMessage = Item.ConfirmMessage;
sScript = Item.PreJs + ";" + Item.Js + ";" + this.Page.ClientScript.GetPostBackEventReference(this, Item.Key, true) + ";" + Item.NextJs;
oButton.Attributes.Add("onclick", sScript);
return oButton;
}
/// <summary>
/// 建立工具列文字框。
/// </summary>
private Control CreateToolbarTextbox(ToolbarTextbox Item)
{
TextBox oTextBox = new TextBox();
string sScript = null;
oTextBox.Text = Item.Text;
oTextBox.Enabled = Item.Enabled;
oTextBox.ID = Item.Key;
oTextBox.CssClass = Item.CssClass;
oTextBox.CausesValidation = Item.CausesValidation;
//sScript = this.Page.ClientScript.GetPostBackEventReference(this, Item.Key);
sScript = Item.PreJs + ";" + Item.Js + ";" + this.Page.ClientScript.GetPostBackEventReference(this, Item.Key, true) + ";" + Item.NextJs;
oTextBox.Attributes.Add("onclick", sScript);
return oTextBox;
}
/// <summary>
/// 建立工具列標籤。
/// </summary>
private Control CreateToolbarLabel(ToolbarLabel Item)
{
Label oLabel = null;
string sScript = null;
oLabel = new Label();
oLabel.Text = Item.Text;
oLabel.ID = Item.Key;
oLabel.CssClass = Item.CssClass;
//oLabel.CausesValidation = Item.CausesValidation;
oLabel.Enabled = Item.Enabled;
if (Item.Enabled)
{
//sScript = this.Page.ClientScript.GetPostBackEventReference(this, Item.Key);
sScript = Item.PreJs + ";" + Item.Js + ";" + this.Page.ClientScript.GetPostBackEventReference(this, Item.Key, true) + ";" + Item.NextJs;
oLabel.Attributes.Add("onclick", sScript);
}
return oLabel;
}
public void RaisePostBackEvent(string eventArgument)
{
ClickEventArgs oEventArgs = null;
oEventArgs = new ClickEventArgs();
oEventArgs.Key = eventArgument;
//if (eventArgument == "Upd")
//這地方是為了讓如果系統Upd功能採用前台的效果時,由於前台無法控制Upd的visble屬性,所以前台只採用displayNone的效果,但事實上是沒有改變Visble屬性的
//但在儲存功能或刪除功能大多採用後台執行,如果發生刪除失敗或是儲存失敗,則Upd的Button則會顯示出來,原因是ToolBar的判斷是由Visble屬性,所以在這地方加上以下條件
//讓屬於以下條件的也繼續隱藏Upd的Button
//由於Del和Save和Clear的事件也都是在Upd隱藏時才會出現的功能,所以在這邊下這些判斷是沒有影響的 Modify by Gary 2014/06/13
if (eventArgument == "Upd" || eventArgument == "Del" || eventArgument == "Save" || eventArgument == "Clear")
{
this.Items["Upd"].Visible = false;
}
this.OnClick(this, oEventArgs);
}
}
}