using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.ComponentModel;
using System.Collections;
using CommonLib;
namespace WebControls
{
[ToolboxData("<{0}:AXGridView runat=\"server\"></{0}:AXGridView>")]
[ParseChildren(true)]
[PersistChildren(false)]
public class AXGridView : GridView
{
public AXGridView()
: base()
{
PreRender += new EventHandler(AXGridView_PreRender);
try
{
this.PageSize = SystemConfig.GridViewPageSize;
}
catch
{
this.PageSize = 30;
}
}
#region Check Box All Properties
private CascadeCheckBoxCollection _cascadeCheckBoxes;
[
PersistenceMode(PersistenceMode.InnerProperty),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
Description("复选框组集合 一个组由一个 全选复选框 和多个 项复选框组成"),
Category("扩展")
]
public CascadeCheckBoxCollection CascadeCheckBoxes
{
get
{
if (_cascadeCheckBoxes == null)
{
_cascadeCheckBoxes = new CascadeCheckBoxCollection();
}
return _cascadeCheckBoxes;
}
set { _cascadeCheckBoxes = value; }
}
#endregion
#region Check Box All Fields
/// <summary>
/// 用于存每组的全选复选框ID
/// </summary>
private string _checkAllIDString;
/// <summary>
/// 用于存每的项复选框ID
/// </summary>
private string _checkItemIDString;
/// <summary>
/// 每行有一个组的所有项复选框
/// </summary>
private Dictionary<int, string> _checkItemIDDictionary = new Dictionary<int, string>();
#endregion
void AXGridView_PreRender(object sender, EventArgs e)
{
if (CascadeCheckBoxes.Count > 0)
{
if (!Page.ClientScript.IsClientScriptBlockRegistered("JsCheckAll"))
{
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "JsCheckAll", jsCheckAll);
}
StringBuilder script = new StringBuilder();
foreach (CascadeCheckbox cc in this.CascadeCheckBoxes)
{
script.AppendFormat(String.Format("yy_sgv_ccGridView_pre.push('{0}');",
this.NamingContainer.Parent == null ? this.ID : string.Format("{0}_{1}", this.NamingContainer.ClientID, this.ID)));
script.AppendFormat(String.Format("yy_sgv_ccAll_post.push('{0}');", cc.ParentCheckboxID));
script.AppendFormat(String.Format("yy_sgv_ccItem_post.push('{0}');", cc.ChildCheckboxID));
}
// 注册向数组中添加成员的脚本
if (!Page.ClientScript.IsClientScriptBlockRegistered(String.Format("yy_sgv_cascadeCheckbox_{0}", this.ID)))
{
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), String.Format("yy_sgv_cascadeCheckbox_{0}", this.ID), script.ToString(), true);
}
}
}
#region Check Box All Script
internal const string jsCheckAll = @"<script type=""text/javascript"">
//<![CDATA[
/*联动复选框 开始*/
var yy_sgv_ccGridView_pre = new Array(); // cs中动态向其灌数据(GridView内控件ID的前缀数组)
var yy_sgv_ccAll_post = new Array(); // cs中动态向其灌数据(全选复选框ID的后缀数组)
var yy_sgv_ccItem_post = new Array(); // cs中动态向其灌数据(项复选框ID的后缀数组)
function yy_sgv_ccCheck(e)
{
/// <summary>单击复选框时</summary>
var evt = e || window.event; // FF || IE
var obj = evt.target || evt.srcElement // FF || IE
var ccIndex = -1;
for (var i=0; i<yy_sgv_ccGridView_pre.length; i++)
{
if (obj.id.startsWith(yy_sgv_ccGridView_pre[i])
&& (obj.id.endsWith(yy_sgv_ccAll_post[i]) || obj.id.endsWith(yy_sgv_ccItem_post[i])))
{
ccIndex = i;
break;
}
}
if (ccIndex != -1)
{
if (obj.id.endsWith(yy_sgv_ccAll_post[i]))
{
yy_sgv_ccCheckAll(ccIndex, obj.checked);
}
else if (obj.id.endsWith(yy_sgv_ccItem_post[i]))
{
yy_sgv_ccCheckItem(ccIndex);
}
}
}
function yy_sgv_ccCheckAll(ccIndex, isCheckAll)
{
/// <summary>设置全选复选框的状态</summary>
var elements = document.getElementsByTagName('INPUT');
for (i=0; i< elements.length; i++)
{
if (elements[i].type == 'checkbox'
&& elements[i].id.startsWith(yy_sgv_ccGridView_pre[ccIndex])
&& elements[i].id.endsWith(yy_sgv_ccItem_post[ccIndex]))
{
elements[i].checked = isCheckAll;
// if (yy_sgv_crClassName != '')
// {
// yy_sgv_changeCheckedRowCssClass(elements[i], yy_sgv_crClassName, false);
// }
}
}
}
function yy_sgv_ccCheckItem(ccIndex)
{
/// <summary>单击项复选框时</summary>
var elements = document.getElementsByTagName('INPUT');
var checkedNum = 0;
var uncheckedNum = 0;
for (i=0; i< elements.length; i++)
{
if (elements[i].type == 'checkbox'
&& elements[i].id.startsWith(yy_sgv_ccGridView_pre[ccIndex])
&& elements[i].id.endsWith(yy_sgv_ccItem_post[ccIndex]))
{
if (elements[i].checked)
{
checkedNum++;
}
else
{
uncheckedNum++;
}
}
}
if (uncheckedNum == 0)
{
yy_sgv_ccCheckCheckbox(yy_sgv_ccGridView_pre[ccIndex], yy_sgv_ccAll_post[ccIndex], true)
}
else
{
yy_sgv_ccCheckCheckbox(yy_sgv_ccGridView_pre[ccIndex], yy_sgv_ccAll_post[ccIndex], false)
}
}
function yy_sgv_ccCheckCheckbox(pre, post, isCheckAll)
{
/// <summary>设置项复选框的状态</summary>
var elements = document.getElementsByTagName('INPUT');
for (i=0; i< elements.length; i++)
{
if (elements[i].type == 'checkbox'
&& elements[i].id.startsWith(pre)
&& elements[i].id.endsWith(post))
{
elements[i].checked = isCheckAll;
break;
}
}
}
function yy_sgv_ccListener()
{
/// <summary>监听所有联动复选框的单击事件</summary>
var elements = document.getElementsByTagName('INPUT');
for (i=0; i< elements.length; i++)
{
if (elements[i].type == 'checkbox')
{
for (j=0; j<yy_sgv_ccGridView_pre.length; j++)
{
if (elements[i].id.startsWith(yy_sgv_ccGridView_pre[j])
&& (elements[i].id.endsWith(yy_sgv_ccAll_post[j]) || elements[i].id.endsWith(yy_sgv_ccItem_post[j])))
{
//alert(elements[i].id +' '+ yy_sgv_ccGridView_pre[j]+' ' + yy_sgv_ccAll_post[j] +' '+yy_sgv_ccItem_post[j] );
Fun_addEvent(elements[i], 'click', yy_sgv_ccCheck);
break;
}
}
}
}
}
if (document.all)
{
window.attachEvent('onload', yy_sgv_ccListener)
}
else
{
window.addEventListener('load', yy_sgv_ccListener, false);
}
//]]>
</script>";
#endregion
#region Empty Row
public string EmptyTableClientID
{
get
{
if (ViewState["EmptyTableClientID"] == null)
{
return string.Empty;
}
return ViewState["EmptyTableClientID"].ToString();
}
set
{
ViewState["EmptyTableClientID"] = value;
}
}
public bool DisplayEmptyRow
{
get
{
if (ViewState["DisplayEmptyRow"] == null)
{
return true;
}
return Convert.ToBoolean(ViewState["DisplayEmptyRow"]);
}
set
{
ViewState["DisplayEmptyRow"] = value;
}
}
public bool DisplayEmptyText
{
get
{
if (ViewState["DisplayEmptyText"] == null)
{
return true;
}
return Convert.ToBoolean(ViewState["DisplayEmptyText"]);
}
set
{
ViewState["DisplayEmptyText"] = value;
}
}
public string EmptyRowText
{
get
{
if (ViewState["EmptyRowText"] == null)
{
return "";
}
return ViewState["EmptyRowText"].ToString();
}
set
{
ViewState["EmptyRowText"] = value;
}
}
/// <summary>
/// Display empty row if no row return from data source
/// </summary>
/// <param name="e"></param>
protected override void OnDataBound(EventArgs e)
{
base.OnDataBound(e);
if (this.Rows.Count == 0 && DisplayEmptyRow)
{
int visibleColumnCount = 0;
GridViewRow newRow = new GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Normal);
for (int i = 0; i < this.Columns.Count; i++)
{
if (this.Columns[i].Visible)
{
//TODO: set up empty row style here
TableHeaderCell cell = new TableHeaderCell();
cell.Text = this.Columns[i].HeaderText;
cell.Scope = TableHeaderScope.Column;
//cell.BackColor = this.HeaderStyle.BackColor;
//cell.ForeColor = this.HeaderStyle.ForeColor;
//cell.Font.CopyFrom(this.HeaderStyle.Font);
//cell.Font.Bold = true;
//cell.VerticalAlign = this.HeaderStyle.VerticalAlign;
newRow.Cells.Add(cell);
visibleColumnCount++;
}
}
newRow.BackColor = HeaderStyle.BackColor;
newRow.ForeColor = HeaderStyle.ForeColor;
newRow.Font.CopyFrom(HeaderStyle.Font);
newRow.VerticalAlign = HeaderStyle.VerticalAlign;
newRow.HorizontalAlign = HeaderStyle.HorizontalAlign;
newRow.CssClass = HeaderStyle.CssClass;
newRow.BorderStyle = HeaderStyle.BorderStyle;
newRow.BorderWidth = HeaderStyle.BorderWidth;
newRow.Height = HeaderStyle.Height;
newRow.Width = HeaderStyle.Width;
Table table = new Table();
table.CopyBaseAttributes(this);
table.ID = "Table";
table.Rows.Add(newRow);
if (DisplayEmptyText)
{
GridViewRow newRow2 = new GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Normal);
newRow2.Cells.Add(new TableCell());
newRow2.Cells[0].Text = EmptyRowText;
newRow2.Cells[0].BackColor = this.Columns[0].ItemStyle.BackColor;
newRow2.Cells[0].ForeColor = this.Columns[0].ItemStyle.ForeColor;
newRow2.Cells[0].ColumnSpan = visibleColumnCount;
newRow2.Cells[0].HorizontalAlign = HorizontalAlign.Center;
table.Rows.Add(newRow2);
}
table.Style[HtmlTextWriterStyle.Height] = "auto;";
this.Controls.Add(table);
EmptyTableClientID = table.ClientID;
}
else
{
EmptyTableClientID = this.ClientID;
}
}
#endregion
#region Sort Tooltip
//private SortTip _sortTip;
/// <summary>
/// Sort tooltip information
/// </summary>
//[Description("Sort tooltip information"),
//Category("Expand"),
//DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
//PersistenceMode(PersistenceMode.InnerProperty)]
//public virtual SortTip SortTip
//{
// get
// {
// if (_sortTip == null)
// {
// _sortTip = new SortTip();
// }
// return _sortTip;
// }
//}
#endregion
#region Command Buttons Confirm Message
public string SelectConfirmMessage
{
get
{
if (ViewState["SelectConfirmMessage"] == null)
{
return string.Empty;
}
return ViewState["SelectConfirmMessage"].ToString();
}
set
{
ViewState["SelectConfirmMessage"] = value;
}
}
public string DeleteConfirmMessage
{
get
{
if (ViewState["DeleteConfirmMessage"] == null)
{
return "";
}
return ViewState["DeleteConfirmMessage"].ToString();
}
set
{
ViewState["DeleteConfirmMessage"] = value;
}
}
public string DeleteSelectedConfirmMessage
{
get
{
if (ViewState["DeleteSelectedConfirmMessage"] == null)
{
return "";
}
return ViewState["DeleteSelectedConfirmMessage"].ToString();
}
set
{
ViewState["DeleteSelectedConfirmMessage"] = value;
}
}
public string UpdateConfirmMessage
{
get
{
if (ViewState["UpdateConfirmMessage"] == null)
{
return string.Empty;
}
return ViewState["UpdateConfirmMessage"].ToString();
}
set
{
ViewState["UpdateConfirmMessage"] = value;
}
}
public string EditConfirmMessage
{
get
{
if (ViewState["EditConfirmMessage"] == null)
{
return string.Empty;
}
return ViewState["EditConfirmMessage"].ToString();
}
set
{
ViewState["EditConfirmMessage"] = value;
}
}
public string CancelConfirmMessage
{
get
{
if (ViewState["CancelConfirmMessage"] == null)
{
return string.Empty;
}
return ViewState["CancelConfirmMessage"].ToString();
}
set
{
ViewState["CancelConfirmMessage"] = value;
}
}
#endregion
#region Sort Image And Text
private string _sortDescImage = "../App_Themes/Default/Images/desc.gif";
/// <summary>
/// 降序提示图片
/// </summary>
public string SortDescImage
{
get { return _sortDescImage; }
set { _sortDescImage = value; }
}
private string _sortAscImage = "../App_Themes/Default/Images/asc.gif";
/// <summary>
/// 升序提示图片
/// </summary>
public string SortAscImage
{
get { return _sortAscImage; }
set { _sortAscImage = value; }
}
private string _sortDescText;
/// <summary>
/// 降序提示文本
/// </summary>
public string SortDescText
{
get { return _sortDescText; }
set { _sortDescText = value; }
}
private string _sortAscText;
/// <summary>
/// 升序提示文本
/// </summary>
public string SortAscText
{
get { return _sortAscText; }
set { _sortAscText = value; }
}
#endregion
protected override void OnRowDataBound(GridViewRowEventArgs e)
{
#region Sort Tooltip
if (e.Row.RowType == DataControlRowType.Header)
{
for (int i = 0; i < e.Row.Cells.Count; i++)
{
LinkButton lbtn = null;
if (e.Row.Cells[i].Controls.Count > 0)
{
for (int k = 0; k < e.Row.Cells[i].Controls.Count; k++)
{
lbtn = e.Row.Cells[i].Controls[k] as LinkButton;
if (lbtn != null)
{
if (lbtn.CommandArgument.Equals(this.SortExpression))
{
Image imgControl = null;
Label lblControl = null;
//Ascending sort
if (this.SortDirection == SortDirection.Ascending)
{
//if (!string.IsNullOrEmpty(this.SortTip.SortAscText))
//{
// lblControl = new Label();
// lblControl.Text = this.SortTip.SortAscText;
//}
//if (!string.IsNullOrEmpty(this.SortTip.SortAscImage))
//{
// imgControl = new Image();
// imgControl.ImageUrl = ResolveUrl(this.SortTip.SortAscImage);
//}
if (!string.IsNullOrEmpty(this.SortAscText))
{
lblControl = new Label();
lblControl.Text = this.SortAscText;
}
if (!string.IsNullOrEmpty(this.SortAscImage))
{
imgControl = new Image();
imgControl.ImageUrl = ResolveUrl(this.SortAscImage);
}
}
else
{
//if (!string.IsNullOrEmpty(this.SortTip.SortDescText))
//{
// lblControl = new Label();
// lblControl.Text = this.SortTip.SortDescText;
//}
//if (!string.IsNullOrEmpty(this.SortTip.SortDescImage))
//{
// imgControl = new Image();
// imgControl.ImageUrl = ResolveUrl(this.SortTip.SortDescImage);
//}
if (!string.IsNullOrEmpty(this.SortDescText))
{
lblControl = new Label();
lblControl.Text = this.SortDescText;
}
if (!string.IsNullOrEmpty(this.SortDescImage))
{
imgControl = new Image();
imgControl.ImageUrl = ResolveUrl(this.SortDescImage);
}
}
//Add sort tooltip text and image to sort field
if (lblControl != null)
{
e.Row.Cells[i].Controls.Add(lblControl);
}
if (imgControl != null)
{
e.Row.Cells[i].Controls.Add(imgControl);
}
}
}
}
}
}
}
#endregion
#region Command Buttons Confirm Message
if (e.Row.RowType == DataControlRowType.DataRow)
{
foreach (TableCell tc in e.Row.Cells)
{
foreach (Control ctl in tc.Controls)
{
if (ctl is IButtonControl)
{
IButtonControl cmdButton = ctl as IButtonControl;
if (!string.IsNullOrEmpty(DeleteConfirmMessage) && cmdButton.CommandName.ToLower() == "delete")
{
IAttributeAccessor iattr = (IAttributeAccessor)cmdButton;
iattr.SetAttribute("onclick", string.Format("javascript:return confirm('{0}');", DeleteConfirmMessage));
}
if (!string.IsNullOrEmpty(SelectConfirmMessage) && cmdButton.CommandName.ToLower() == "select")
{
IAttributeAccessor iattr = (IAttributeAccessor)cmdButton;
iattr.SetAttribute("onclick", string.Format("javascript:return confirm('{0}');", SelectConfirmMessage));
}
if (!string.IsNullOrEmpty(EditConfirmMessage) && cmdButton.CommandName.ToLower() == "edit")
{
IAttributeAccessor iattr = (IAttributeAccessor)cmdButton;
iattr.SetAttribute("onclick", string.Format("javascript:return confirm('{0}');", EditConfirmMessage));
}
if (!string.IsNullOrEmpty(UpdateConfirmMessage) && cmdButton.CommandName.ToLower() == "update")
{
IAttributeAccessor iattr = (IAttributeAccessor)cmdButton;
iattr.SetAttribute("onclick", string.Format("javascript:return confirm('{0}');", UpdateConfirmMessage));
}
if (!string.IsNullOrEmpty(CancelConfirmMessage) && cmdButton.CommandName.ToLower() == "cancel")
{
IAttributeAccessor iattr = (IAttributeAccessor)cmdButton;
iattr.SetAttribute("onclick", string.Format("javascript:return confirm('{0}');", CancelConfirmMessage));
}
}
}
}
}
if (e.Row.RowType == DataControlRowType.Header)
{
foreach (TableCell tc in e.Row.Cells)
{
foreach (Control ctl in tc.Controls)
{
if (ctl is IButtonControl)
{
IButtonControl cmdButton = ctl as IButtonControl;
if (!string.IsNullOrEmpty(DeleteSelectedConfirmMessage) && cmdButton.CommandName.ToLower() == "deleteselected")
{
IAttributeAccessor iattr = (IAttributeAccessor)cmdButton;
iattr.SetAttribute("onclick", string.Format("javascript:return confirm('{0}');", DeleteSelectedConfirmMessage));
}
}
}
}
}
#endregion
#region Check Box All
if (e.Row.RowType == DataControlRowType.DataRow)
{
//for (int i = 0; i < e.Row.Cells.Count; i++)
//{
// for (int j = 0; j < e.Row.Cells[i].Controls.Count; j++)
// {
// if (e.Row.Cells[i].Controls[j] is CheckBox)
// {
// CheckBox chk = e.Row.Cells[i].Controls[j] as CheckBox;
// bool isCheckBoxAll = false;
// foreach (CheckboxAll cba in this.CheckBoxAlls)
// {
// if (chk.NamingContainer.ClientID + "_" + cba.CheckboxItemID == chk.ClientID)
// {
// isCheckBoxAll = true;
// break;
// }
// }
// if (isCheckBoxAll)
// {
// chk.Attributes.Add("onclick", "yy_ClickCheckItem()");
// if (_checkItemIDDictionary.Count == 0 || !_checkItemIDDictionary.ContainsKey(i))
// {
// _checkItemIDDictionary.Add(i, chk.ClientID);
// }
// else
// {
// string s;
// _checkItemIDDictionary.TryGetValue(i, out s);
// _checkItemIDDictionary.Remove(i);
// _checkItemIDDictionary.Add(i, s + this.ItemSeparator + chk.ClientID);
// }
// break;
// }
// }
// }
//}
}
else if (e.Row.RowType == DataControlRowType.Header)
{
//for (int i = 0; i < e.Row.Cells.Count; i++)
//{
// for (int j = 0; j < e.Row.Cells[i].Controls.Count; j++)
// {
// if (e.Row.Cells[i].Controls[j] is CheckBox)
// {
// CheckBox chk = (CheckBox)e.Row.Cells[i].Controls[j];
// bool isCheckboxAll = false;
// foreach (CheckboxAll cba in this.CheckBoxAlls)
// {
// if (chk.NamingContainer.ClientID + "_" + cba.CheckboxAllID == chk.ClientID)
// {
// isCheckboxAll = true;
// break;
// }
// }
// if (isCheckboxAll)
// {
// chk.Attributes.Add("onclick", "yy_ClickCheckAll(this)");
// if (String.IsNullOrEmpty(this._checkAllIDString))
// {
// this._checkAllIDString += chk.ClientID;
// }
// else
// {
// this._checkAllIDString += this.GroupSeparator + chk.ClientID;
// }
// break;
// }
// }
// }
//}
}
else if (e.Row.RowType == DataControlRowType.Pager)
{
//TODO:
//LinkButton lbtnDelete = new LinkButton();
//lbtnDelete.Text = "Delete Selected";
//lbtnDelete.CommandName = "deleteall";
//e.Row.Cells[0].Controls.Add(lbtnDelete);
}
#endregion
base.OnRowDataBound(e);
}
/// <summary>
/// 获取GridView中通过复选框选中的行的DataKey集合
/// </summary>
/// <param name="columnIndex">CheckBox在GridView中的列索引</param>
/// <returns></returns>
public List<DataKey> GetCheckedDataKey(int columnIndex)
{
if (this.DataKeyNames.Length == 0)
throw new ArgumentNullException("DataKeys", "DataKeyNames are null or empty.");
List<DataKey> list = new List<DataKey>();
int i = 0;
foreach (GridViewRow row in this.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
foreach (Control c in row.Cells[columnIndex].Controls)
{
if (c is CheckBox && ((CheckBox)c).Checked)
{
list.Add(this.DataKeys[i]);
break;
}
}
i++;
}
}
return list;
}
/// <summary>
/// 获取GridView中通过复选框选中的行的DataKey集合
/// </summary>
/// <param name="columnIndex">CheckBox在GridView中的列索引</param>
/// <param name="columnIndex">Whether the checkbox was selected</param>
/// <returns></returns>
public string BuildXmlStringByDataKey(string xmlRootName, int columnIndex, out bool isCheck)
{
if (this.DataKeyNames.Length == 0)
throw new ArgumentNullException("DataKeys", "DataKeyNames are null or empty.");
StringBuilder xmlString = new StringBuilder();
xmlString.AppendFormat("<{0}>", xmlRootName);
isCheck = false;
int i = 0;
foreach (GridViewRow row in this.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
foreach (Control c in row.Cells[columnIndex].Controls)
{
if (c is CheckBox && ((CheckBox)c).Checked)
{
xmlString.AppendFormat("<value>{0}</value>", this.DataKeys[i].Value);
isCheck = true;
break;
}
}
i++;
}
}
xmlString.AppendFormat("</{0}>", xmlRootName);
return xmlString.ToString();
}
}
/// <summary>
/// Sort tip helper class
/// </summary>
[TypeConverter(typeof(ExpandableObjectConverter))]
public class SortTip
{
private string _sortDescImage;
/// <summary>
/// 降序提示图片
/// </summary>
[
Description("降序提示图片"),
Category("扩展"),
Editor("System.Web.UI.Design.UrlEditor", typeof(System.Drawing.Design.UITypeEditor)),
DefaultValue(""),
NotifyParentProperty(true)
]
public string SortDescImage
{
get { return _sortDescImage; }
set { _sortDescImage = value; }
}
private string _sortAscImage;
/// <summary>
/// 升序提示图片
/// </summary>
[
Description("升序提示图片"),
Category("扩展"),
Editor("System.Web.UI.Design.UrlEditor", typeof(System.Drawing.Design.UITypeEditor)),
DefaultValue(""),
NotifyParentProperty(true)
]
public string SortAscImage
{
get { return _sortAscImage; }
set { _sortAscImage = value; }
}
private string _sortDescText;
/// <summary>
/// 降序提示文本
/// </summary>
[
Description("降序提示文本"),
Category("扩展"),
DefaultValue(""),
NotifyParentProperty(true)
]
public string SortDescText
{
get { return _sortDescText; }
set { _sortDescText = value; }
}
private string _sortAscText;
/// <summary>
/// 升序提示文本
/// </summary>
[
Description("升序提示文本"),
Category("扩展"),
DefaultValue(""),
NotifyParentProperty(true)
]
public string SortAscText
{
get { return _sortAscText; }
set { _sortAscText = value; }
}
/// <summary>
/// ToString()
/// </summary>
/// <returns></returns>
public override string ToString()
{
return "SortTip";
}
}
/// <summary>
/// CheckboxAll class for multi-selection support
/// </summary>
[ToolboxItem(false)]
public class CascadeCheckbox
{
private string _ParentCheckboxID;
/// <summary>
/// Parent box ID in template
/// </summary>
public string ParentCheckboxID
{
set {_ParentCheckboxID= value;}
get { return _ParentCheckboxID; }
}
private string _ChildCheckboxID;
/// <summary>
/// Child item box ID in template
/// </summary>
public string ChildCheckboxID
{
set { _ChildCheckboxID = value; }
get { return _ChildCheckboxID; }
}
}
public class CascadeCheckBoxCollection : CollectionBase
{
public CascadeCheckBoxCollection()
: base()
{
}
public CascadeCheckbox this[int index]
{
get
{
return base.List[index] as CascadeCheckbox;
}
set
{
base.List[index] = (CascadeCheckbox)value;
}
}
public void Add(CascadeCheckbox item)
{
base.List.Add(item);
}
public void Remove(int index)
{
if (index > -1 && index < base.Count)
{
base.List.RemoveAt(index);
}
}
public override string ToString()
{
return "CascadeCheckBoxCollection";
}
}
}
转载于:https://www.cnblogs.com/blackbean/archive/2011/04/22/2025134.html