三生石上 b00e9fd413 v4.2.3
2016-01-10 01:10:35 -05:00

699 lines
17 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#region Comment
/*
* Project FineUI
*
* FileName: LinkButtonField.cs
* CreatedOn: 2008-06-23
* CreatedBy: 30372245@qq.com
*
*
* Description
* ->
*
* History
* ->
*
*
*
*
*/
#endregion
using System;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design.Serialization;
using System.Text;
using System.Xml;
using System.Web;
using System.Web.UI;
using System.Globalization;
using System.Reflection;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using System.Web.UI.Design;
using System.Drawing.Design;
namespace FineUI
{
/// <summary>
/// 表格链接按钮列
/// </summary>
[ToolboxItem(false)]
[ParseChildren(true)]
[PersistChildren(false)]
public class LinkButtonField : BaseField
{
#region override
internal override string InnerCls
{
get
{
return "f-grid-cell-inner-image";
}
}
private bool _enableHeaderMenu = false;
/// <summary>
/// 启用表头菜单
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue(false)]
[Description("启用表头菜单")]
public override bool EnableHeaderMenu
{
get
{
return _enableHeaderMenu;
}
set
{
_enableHeaderMenu = value;
}
}
private bool _allowHideColumn = false;
/// <summary>
/// 是否允许隐藏列
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue(false)]
[Description("是否允许隐藏列")]
public override bool EnableColumnHide
{
get
{
return _allowHideColumn;
}
set
{
_allowHideColumn = value;
}
}
#endregion
#region Properties
private string _dataTextField = String.Empty;
/// <summary>
/// 字段名称
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue("")]
[Description("字段名称")]
public string DataTextField
{
get
{
return _dataTextField;
}
set
{
_dataTextField = value;
}
}
private string _dataTextFormatString = String.Empty;
/// <summary>
/// 字段格式化字符串
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue("")]
[Description("字段格式化字符串")]
public string DataTextFormatString
{
get
{
return _dataTextFormatString;
}
set
{
_dataTextFormatString = value;
}
}
private string _text = String.Empty;
/// <summary>
/// 按钮文本
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue("")]
[Description("按钮文本")]
public string Text
{
get
{
return _text;
}
set
{
_text = value;
}
}
private bool _htmlEncode = true;
/// <summary>
/// 显示之前进行HTML编码默认为true
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue(true)]
[Description("显示之前进行HTML编码默认为true")]
public bool HtmlEncode
{
get
{
return _htmlEncode;
}
set
{
_htmlEncode = value;
}
}
private bool _htmlEncodeFormatString = true;
/// <summary>
/// 是否在应用DataFormatString属性之后进行HTML编码默认为true
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue(true)]
[Description("是否在应用DataFormatString属性之后进行HTML编码默认为true")]
public bool HtmlEncodeFormatString
{
get
{
return _htmlEncodeFormatString;
}
set
{
_htmlEncodeFormatString = value;
}
}
#endregion
#region Properties
private bool _enablePostBack = true;
/// <summary>
/// 是否可以回发
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue(true)]
[Description("是否可以回发")]
public bool EnablePostBack
{
get
{
return _enablePostBack;
}
set
{
_enablePostBack = value;
}
}
private bool _enabled = true;
/// <summary>
/// 是否可用
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue(true)]
[Description("是否可用")]
public override bool Enabled
{
get
{
return _enabled;
}
set
{
_enabled = value;
}
}
private string _onClientClick = String.Empty;
/// <summary>
/// 点击按钮时需要执行的客户端脚本
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue("")]
[Description("点击按钮时需要执行的客户端脚本")]
public string OnClientClick
{
get
{
return _onClientClick;
}
set
{
_onClientClick = value;
}
}
private string[] _validateForms = null;
/// <summary>
/// 提交之前需要验证的表单名称列表
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue(null)]
[Description("提交之前需要验证的表单名称列表")]
[TypeConverter(typeof(StringArrayConverter))]
public string[] ValidateForms
{
get
{
return _validateForms;
}
set
{
_validateForms = value;
}
}
private Target _validateTarget = Target.Self;
/// <summary>
/// 验证失败时提示对话框弹出位置
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue(Target.Self)]
[Description("验证失败时提示对话框弹出位置")]
public Target ValidateTarget
{
get
{
return _validateTarget;
}
set
{
_validateTarget = value;
}
}
private bool _validateMessageBox = true;
/// <summary>
/// 验证失败时是否出现提示对话框
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue(true)]
[Description("验证失败时是否出现提示对话框")]
public bool ValidateMessageBox
{
get
{
return _validateMessageBox;
}
set
{
_validateMessageBox = value;
}
}
private Icon _icon = Icon.None;
/// <summary>
/// 图标
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue(Icon.None)]
[Description("图标")]
public Icon Icon
{
get
{
return _icon;
}
set
{
_icon = value;
}
}
private string _iconUrl = String.Empty;
/// <summary>
/// 图标地址
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue("")]
[Description("图标地址")]
[Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))]
public string IconUrl
{
get
{
return _iconUrl;
}
set
{
_iconUrl = value;
}
}
#endregion
#region ConfirmText/ConfirmTitle/ConfirmIcon
private string _confirmTitle = "";
/// <summary>
/// 确认对话框标题
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue("")]
[Description("确认对话框标题")]
public string ConfirmTitle
{
get
{
return _confirmTitle;
}
set
{
_confirmTitle = value;
}
}
private string _confirmText = String.Empty;
/// <summary>
/// 确认对话框内容
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue("")]
[Description("确认对话框内容")]
public string ConfirmText
{
get
{
return _confirmText;
}
set
{
_confirmText = value;
}
}
private MessageBoxIcon _confirmIcon = MessageBoxIcon.Warning;
/// <summary>
/// 确认对话框提示图标
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue(MessageBoxIcon.Warning)]
[Description("确认对话框提示图标")]
public MessageBoxIcon ConfirmIcon
{
get
{
return _confirmIcon;
}
set
{
_confirmIcon = value;
}
}
private Target _confirmTarget = Target.Self;
/// <summary>
/// 确认对话框弹出位置
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue(Target.Self)]
[Description("确认对话框弹出位置")]
public Target ConfirmTarget
{
get
{
return _confirmTarget;
}
set
{
_confirmTarget = value;
}
}
#endregion
#region CommandName/CommandArgument
private string _commandName = String.Empty;
/// <summary>
/// 命令名称
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue("")]
[Description("命令名称")]
public string CommandName
{
get
{
return _commandName;
}
set
{
_commandName = value;
}
}
private string _commandArgument = String.Empty;
/// <summary>
/// 命令参数
/// </summary>
[Category(CategoryName.OPTIONS)]
[DefaultValue("")]
[Description("命令参数")]
public string CommandArgument
{
get
{
return _commandArgument;
}
set
{
_commandArgument = value;
}
}
#endregion
#region EnableAjax
private object _enableAjax = null;
/// <summary>
/// 是否启用AJAX
/// </summary>
[Category(CategoryName.BASEOPTIONS)]
[DefaultValue(true)]
[Description("是否启用AJAX")]
public override bool EnableAjax
{
get
{
if (_enableAjax == null)
{
if (DesignMode)
{
return true;
}
else
{
return Grid.EnableAjax;
}
}
return (bool)_enableAjax;
}
set
{
_enableAjax = value;
}
}
#endregion
#region Methods
internal override object GetColumnValue(GridRow row)
{
//string result = String.Empty;
#region DataTextField
string text = String.Empty;
if (!String.IsNullOrEmpty(DataTextField))
{
object value = row.GetPropertyValue(DataTextField);
if (value != null)
{
if (!String.IsNullOrEmpty(DataTextFormatString))
{
text = String.Format(DataTextFormatString, value);
if (HtmlEncodeFormatString)
{
text = HttpUtility.HtmlEncode(text);
}
}
else
{
text = value.ToString();
if (HtmlEncode)
{
text = HttpUtility.HtmlEncode(text);
}
}
}
}
else
{
text = Text;
}
#endregion
HtmlNodeBuilder nb;
#region Enabled
nb = new HtmlNodeBuilder("a");
if (Enabled)
{
nb.SetProperty("href", "javascript:;");
// click
string paramStr = String.Format("Command${0}${1}${2}${3}", row.RowID, ColumnID, CommandName.Replace("'", "\""), CommandArgument.Replace("'", "\""));
string postBackReference = Grid.GetPostBackEventReference(paramStr, EnableAjax);
string clientScript = Button.ResolveClientScript(ValidateForms, ValidateTarget, ValidateMessageBox, EnablePostBack, postBackReference,
ConfirmText, ConfirmTitle, ConfirmIcon, ConfirmTarget, OnClientClick, String.Empty);
//clientScript = JsHelper.GetDeferScript(clientScript, 0) + "F.stopEvent();";
//clientScript = clientScript + "F.stop();";
nb.SetProperty("onclick", clientScript);
//result = nb.ToString();
}
else
{
nb.SetProperty("class", "x-item-disabled");
nb.SetProperty("disabled", "disabled");
//nb = new HtmlNodeBuilder("span");
//nb.SetProperty("class", "gray");
//nb.InnerProperty = text;
//result = String.Format("<span class=\"gray\">{0}</span>", text);
}
nb.InnerProperty = text;
#endregion
string tooltip = GetTooltipString(row);
#region Icon IconUrl
string resolvedIconUrl = IconHelper.GetResolvedIconUrl(Icon, IconUrl);
if (!String.IsNullOrEmpty(resolvedIconUrl))
{
nb.InnerProperty = String.Format("<img src=\"{0}\" {1} />", resolvedIconUrl, tooltip) + nb.InnerProperty;
}
#endregion
//string result = nb.ToString();
//#region Tooltip
//if (!String.IsNullOrEmpty(tooltip))
//{
// if (result.StartsWith("<a "))
// {
// result = result.ToString().Insert(2, tooltip);
// }
// else if (result.StartsWith("<span "))
// {
// result = result.ToString().Insert(5, tooltip);
// }
//}
//#endregion
//return result;
string result = nb.ToString();
if (!String.IsNullOrEmpty(tooltip))
{
result = result.ToString().Insert("<a".Length, tooltip);
}
return result;
}
//public override string GetFieldType()
//{
// return "string";
//}
#endregion
#region OnFirstPreRender
/// <summary>
/// 渲染 HTML 之前调用(页面第一次加载或者普通回发)
/// </summary>
protected override void OnFirstPreRender()
{
base.OnFirstPreRender();
string jsContent = String.Format("var {0}={1};", XID, OB.ToString());
AddGridColumnScript(jsContent);
}
#endregion
}
}