日期:2014-05-19  浏览次数:20700 次

高分求一个重写DataList基类的问题,谢谢大家关注
哪位大哥帮我解决下:

以前我的贴:

http://community.csdn.net/Expert/topic/5574/5574417.xml?temp=.4164392

这贴子中的

private   void   d_ItemDataBound(object   sender,   System.Web.UI.WebControls.DataListItemEventArgs   e)
{
HyperLink   h;
if   (e.Item.ItemType   ==   ListItemType.Item   ||   e.Item.ItemType   ==   ListItemType.AlternatingItem)
{
h   =   (HyperLink)e.Item.FindControl( "h1 ");
if   (h   !=   null)
{
h.Text   =   ((DataRowView)e.Item.DataItem).Row[ "au_id "].ToString();
h.NavigateUrl   =   "Msg.aspx?id= "   +   h.Text;
}
}
}

现在我想把private   void   d_ItemDataBound(object   sender,   System.Web.UI.WebControls.DataListItemEventArgs   e)改成

private   void   d_ItemDataBound(object   sender,   System.Web.UI.WebControls.DataListItemEventArgs   e,string   strHtml)

即由两个参数,改成三个参数,有没办法改,都要改哪里?
谢谢

------解决方案--------------------
系统定义好的事件参数改不了的了,你只能通过其它的方法来解决.除非你是引发的自已定义的事件及用的是自定义的事件参数才可以了.
------解决方案--------------------
你要重新定义一个ItemDataBound事件的委托。还要重写OnItemDataBound方法。如:

public delegate void MyItemDataBoundEventHandler(object sender,DataListItemEventArgs e,string strHtml)

new public event MyItemDataBoundEventHandler ItemDataBound;

protected override OnItemDataBound(DataListItemEventArgs e)
{
if(ItemDataBound!=null)
{
ItemDataBound(this,e, "strHtml ");
}
}
------解决方案--------------------
就是让OnItemDataBound引发自己定义的ItemDataBound事件,建议这里不要和系统定义的一样。我这里只是做实验,所以这样弄了!