假设我声明了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.
我想通过标记设置它是不可能的,但我只是想知道。在代码中设置委托很容易,但我只是想学习新的东西。谢谢你的帮助。
答案 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);