天天看点

上接扩展GridView控件(3) - 根据按钮的CommandName设置其客户端属性

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

/// <summary> 

        /// 类型转换器 

        /// </summary> 

        public class ConfirmButtonConverter : ExpandableObjectConverter 

        { 

                /// <summary> 

                /// 返回值能否将ConfirmButton类型转换为String类型 

                /// </summary> 

                /// <param name="context"></param> 

                /// <param name="destinationType"></param> 

                /// <returns></returns> 

                public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) 

                { 

                        if (destinationType == typeof(string)) 

                        { 

                                return true; 

                        } 

                        return base.CanConvertTo(context, destinationType); 

                } 

                /// 将ConfirmButton类型转换为String类型 

                /// <param name="culture"></param> 

                /// <param name="value"></param> 

                public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, 

                        object value, Type destinationType) 

                        if (value != null) 

                                if (!(value is YYControls.SmartGridView.ConfirmButton)) 

                                { 

                                        throw new ArgumentException( 

                                                "无效的ConfirmButton", "value"); 

                                } 

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

                                if (value == null) 

                                        return String.Empty; 

                                return "ConfirmButton"; 

                        return base.ConvertTo(context, culture, value, destinationType); 

        }

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

private ConfirmButtons _confirmButtons; 

                /// 确认按钮集合 

                [ 

                PersistenceMode(PersistenceMode.InnerProperty), 

                DesignerSerializationVisibility(DesignerSerializationVisibility.Content), 

                Description("确认按钮集合,确认按钮的CommandName和提示信息"), 

                Category("扩展") 

                ] 

                public virtual ConfirmButtons ConfirmButtons 

                        get 

                                if (_confirmButtons == null) 

                                        _confirmButtons = new ConfirmButtons(); 

                                return _confirmButtons; 

                }

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

                /// OnRowDataBound 

                /// <param name="e"></param> 

                protected override void OnRowDataBound(GridViewRowEventArgs e) 

                        if (e.Row.RowType == DataControlRowType.DataRow) 

                                if (this._confirmButtons != null) 

                                        // GridViewRow的每个TableCell 

                                        foreach (TableCell tc in e.Row.Cells) 

                                        { 

                                                // TableCell里的每个Control 

                                                foreach (Control c in tc.Controls) 

                                                { 

                                                        // 如果控件继承自接口IButtonControl 

                                                        if (c.GetType().GetInterface("IButtonControl") != null && c.GetType().GetInterface("IButtonControl").Equals(typeof(IButtonControl))) 

                                                        { 

                                                                // 从用户定义的ConfirmButtons集合中分解出ConfirmButton 

                                                                foreach (ConfirmButton cb in _confirmButtons) 

                                                                { 

                                                                        // 如果发现的按钮的CommandName在ConfirmButtons有定义的话 

                                                                        if (((IButtonControl)c).CommandName == cb.CommandName) 

                                                                        { 

                                                                                // 增加确认框属性 

                                                                                ((IAttributeAccessor)c).SetAttribute("onclick", "return confirm('"+ cb.ConfirmMessage + "')"); 

                                                                                break; 

                                                                        } 

                                                                } 

                                                        } 

                                                } 

                                        } 

                        base.OnRowDataBound(e); 

控件使用

添加这个控件到工具箱里,然后拖拽到webform上,设置其ConfirmButtons属性即可。CommandName是命令按钮的CommandName属性;ConfirmMessage是弹出的确认框所显示的文字。

ObjData.cs

using System; 

using System.Data; 

using System.Configuration; 

using System.Web; 

using System.Web.Security; 

using System.Web.UI; 

using System.Web.UI.WebControls; 

using System.Web.UI.WebControls.WebParts; 

using System.Web.UI.HtmlControls; 

using System.ComponentModel; 

/// OjbData 的摘要说明 

/// </summary> 

public class OjbData 

        public OjbData() 

                // 

                // TODO: 在此处添加构造函数逻辑 

        } 

        [DataObjectMethod(DataObjectMethodType.Select, true)] 

        public DataTable Select() 

                DataTable dt = new DataTable(); 

                dt.Columns.Add("no", typeof(string)); 

                dt.Columns.Add("name", typeof(string)); 

                for (int i = 0; i < 30; i++) 

                        DataRow dr = dt.NewRow(); 

                        dr[0] = "no" + i.ToString().PadLeft(2, '0'); 

                        dr[1] = "name" + i.ToString().PadLeft(2, '0'); 

                        dt.Rows.Add(dr); 

                return dt; 

}

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 

<head runat="server"> 

        <title>无标题页</title> 

</head> 

<body> 

        <form id="form1" runat="server"> 

                <div> 

                        <yyc:SmartGridView ID="SmartGridView1" runat="server" AutoGenerateColumns="false" 

                                DataSourceID="ObjectDataSource1"> 

                                <Columns> 

                                        <asp:BoundField DataField="no" HeaderText="序号" SortExpression="no" /> 

                                        <asp:BoundField DataField="name" HeaderText="名称" SortExpression="name" /> 

                                        <asp:ButtonField CommandName="ConfirmTest" Text="确认按钮测试" /> 

                                </Columns> 

                                <ConfirmButtons> 

                                        <yyc:ConfirmButton ConfirmMessage="确认删除吗?" CommandName="ConfirmTest"></yyc:ConfirmButton> 

                                </ConfirmButtons> 

                        </yyc:SmartGridView> 

                        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="Select" 

                                TypeName="OjbData"></asp:ObjectDataSource> 

                </div> 

        </form> 

</body> 

</html>

/*测试版的实现 结束*/

OK

<a href="http://down.51cto.com/data/101204" target="_blank">[源码下载]</a>

     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/345448,如需转载请自行联系原作者