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
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);
|
|
|
|
}
|
|
|
|
}
|
|
}
|