ASP.Net中的GridView委托问题

时间:2010-07-02 16:21:24

标签: asp.net gridview delegates

假设我声明了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 个答案:

答案 0 :(得分:1)

听起来你真正想要做的就是揭露一个事件。添加:

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);