给按钮增加单击弹出确认框的功能是经常要用到的,我们一般是通过在RowDataBound事件里编码的方式实现,麻烦,所以扩展一下。
控件开发
1、新建一个继承自GridView的类。
/**/
///<summary>
///继承自GridView
///</summary>
[ToolboxData(
@"
<{0}:SmartGridViewrunat='server'></{0}:SmartGridView>
"
)]
public
class
SmartGridView:GridView

{
}
2、新建一个ConfirmButton类,有两个属性
/**/
///<summary>
///ConfirmButton的摘要说明。
///</summary>
[ToolboxItem(
false
)]
[TypeConverter(
typeof
(ConfirmButtonConverter))]
public
class
ConfirmButton

{
privatestring_commandName;

/**////<summary>
///按钮的CommandName
///</summary>
publicstringCommandName


{

get
{returnthis._commandName;}

set
{this._commandName=value;}
}

privatestring_confirmMessage;

/**////<summary>
///确认框弹出的信息
///</summary>
publicstringConfirmMessage


{

get
{returnthis._confirmMessage;}

set
{this._confirmMessage=value;}
}
}
3、新建一个继承自CollectionBase的类ConfirmButtons
/**/
///<summary>
///ProjectGroups的摘要说明。
///注意要继承自CollectionBase
///</summary>
[
ToolboxItem(
false
),
ParseChildren(
true
)
]
public
class
ConfirmButtons:CollectionBase

{

/**////<summary>
///构造函数
///</summary>
publicConfirmButtons()
:base()


{
}


/**////<summary>
///实现IList接口
///获取或设置指定索引处的元素。
///</summary>
///<paramname="index">要获得或设置的元素从零开始的索引</param>
///<returns></returns>
publicConfirmButtonthis[intindex]


{
get


{
return(ConfirmButton)base.List[index];
}
set


{
base.List[index]=(ConfirmButton)value;
}
}


/**////<summary>
///实现IList接口
///将某项添加到System.Collections.IList中。
///</summary>
///<paramname="item">要添加到System.Collections.IList的System.Object。</param>
publicvoidAdd(ConfirmButtonitem)


{
base.List.Add(item);
}


/**////<summary>
///实现IList接口
///从System.Collections.IList中移除特定对象的第一个匹配项。
///</summary>
///<paramname="index">要从System.Collections.IList移除的System.Object</param>
publicvoidRemove(intindex)


{
if(index>-1&&index<base.Count)


{
base.List.RemoveAt(index);
}
}
}
4、新建一个继承自ExpandableObjectConverter的类ConfirmButtonConverter
/**/
///<summary>
///类型转换器
///</summary>
public
class
ConfirmButtonConverter:ExpandableObjectConverter

{

/**////<summary>
///返回值能否将ConfirmButton类型转换为String类型
///</summary>
///<paramname="context"></param>
///<paramname="destinationType"></param>
///<returns></returns>
publicoverrideboolCanConvertTo(ITypeDescriptorContextcontext,TypedestinationType)


{
if(destinationType==typeof(string))


{
returntrue;
}
returnbase.CanConvertTo(context,destinationType);
}


/**////<summary>
///将ConfirmButton类型转换为String类型
///</summary>
///<paramname="context"></param>
///<paramname="culture"></param>
///<paramname="value"></param>
///<paramname="destinationType"></param>
///<returns></returns>
publicoverrideobjectConvertTo(ITypeDescriptorContextcontext,CultureInfoculture,
objectvalue,TypedestinationType)


{
if(value!=null)


{
if(!(valueisYYControls.SmartGridView.ConfirmButton))


{
thrownewArgumentException(
"无效的ConfirmButton","value");
}
}

if(destinationType.Equals(typeof(string)))


{
if(value==null)


{
returnString.Empty;
}
return"ConfirmButton";
}
returnbase.ConvertTo(context,culture,value,destinationType);
}
}
5、在继承自GridView的类中加一个复杂对象属性,该复杂对象就是第3步创建的那个ConfirmButtons
private
ConfirmButtons_confirmButtons;

/**/
///<summary>
///确认按钮集合
///</summary>
[
PersistenceMode(PersistenceMode.InnerProperty),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
Description(
"
确认按钮集合,确认按钮的CommandName和提示信息
"
),
Category(
"
扩展
"
)
]
public
virtual
ConfirmButtonsConfirmButtons

{
get


{
if(_confirmButtons==null)


{
_confirmButtons=newConfirmButtons();
}
return_confirmButtons;
}
}
6、重写OnRowDataBound实现单击命令按钮弹出确认框的功能。主要是给按钮增加一个客户端的onclick事件。
/**/
///<summary>
///OnRowDataBound
///</summary>
///<paramname="e"></param>
protected
override
void
OnRowDataBound(GridViewRowEventArgse)

{
if(e.Row.RowTy
控件开发
1、新建一个继承自GridView的类。










2、新建一个ConfirmButton类,有两个属性












































3、新建一个继承自CollectionBase的类ConfirmButtons
















































































4、新建一个继承自ExpandableObjectConverter的类ConfirmButtonConverter






































































5、在继承自GridView的类中加一个复杂对象属性,该复杂对象就是第3步创建的那个ConfirmButtons





























6、重写OnRowDataBound实现单击命令按钮弹出确认框的功能。主要是给按钮增加一个客户端的onclick事件。









