代码之家  ›  专栏  ›  技术社区  ›  dcp

ASP.NET中的GridView委托问题

  •  0
  • dcp  · 技术社区  · 15 年前

    假设我有一个 GridViewEx 声明扩展的类 GridView . 在这个类中,我有一个声明为 GetDataPage . 所以看起来是这样的:

    public class GridViewEx : GridView
    {
        public delegate object GetDataPageDelegate(int pageIndex, int pageSize, string sortExpression,
            IList<FilterItem> filterItems);
    
        [Browsable(true), Category("NewDynamic")]
        [Description("Method used to fetch the data for this grid")]
        public GetDataPageDelegate GetDataPage
        {
            get
            {
                return ViewState["pgv_getgriddata"] as GetDataPageDelegate;
            }
            set
            {
                ViewState["pgv_getgriddata"] = value;
            }
        }
    
        // ... other parts of class omitted
    }
    

    这行得通,做我想做的。但我希望能够在GridViewEx的标记中设置此委托,如下所示:

    <div style="margin-top: 20px;">
        <custom:GridViewEx ID="gridView" runat="server" SkinID="GridViewEx" Width="40%" AllowSorting="true"
            VirtualItemCount="-1" AllowPaging="true" GetDataPage="Helper.GetDataPage">
        </custom:GridViewEx>
    </div>
    

    但是,我得到这个错误:

    Error 1 Cannot create an object of type 'GUI.Controls.GridViewEx+GetDataPageDelegate' from its string representation 'Helper.GetDataPage' for the 'GetDataPage' property.
    

    我想不可能通过标记来设置它,但我只是想知道。用代码设置代理已经很容易了,但我只是想学习一些新的东西。谢谢你的帮助。

    1 回复  |  直到 15 年前
        1
  •  1
  •   matt-dot-net    15 年前

    听起来你真正想做的是公开一个事件。添加:

    public event GetDataPageDelegate GettingDataPage
    

    然后在标记中,您可以说:

    <custom:GridViewEx ID="gridView" runat="server" SkinID="GridViewEx" Width="40%" AllowSorting="true" 
        VirtualItemCount="-1" AllowPaging="true" OnGettingDataPage="Helper.GetDataPage"> 
    </custom:GridViewEx>
    

    通过“引发”DataBind方法中的事件,例如:

    if(GettingDataPage!=null)
       GettingDataPage(pageIndex,pageSize,sortExpression,filterItems);
    

    但是,我将遵循事件模式并创建一个新对象:

    public class GettingDataPageEventArgs : EventArgs
    {
       public int PageIndex{get;set;}
       public int PageSize{get;set;}
       public string SortExpression{get;set;}
       public IList<FilterItem> FilterList{get;set;}
    }
    

    将您的代表改为

    public delegate void GettingDataPageEventHandler(object sender, GettingDataPageEventArgs);