2010-07-02 72 views
0

比方说,我有一个GridViewEx类宣布扩展GridView。在该课堂内部,我有一个名为GetDataPage的代表。所以它看起来像这样:GridView委托问题在ASP.Net

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. 

我猜猜它不可能通过标记来设置,但我只是想知道。代码中设置委托很容易,但我只是想学习新的东西。谢谢你的帮助。

+0

只是一个问题,但您提供的委托对象要求其构造函数的参数?也许在该地区周围的某些事情正在造成你的问 – 2010-07-02 16:38:16

+0

我不认为构造函数会影响它。我认为可能只是用标记来设置委托,但我想我会问这里只是为了确定:)。 – dcp 2010-07-02 16:47:21

+0

首先,如果您在标记中定义它的值,那么使用viewstate是没有意义的。 如果您正在动态设置值,则使用Viewstate,例如将它们与数据源绑定。 你在哪里调用GetDataPage? – Jeroen 2010-07-02 18:33:10

回答

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