解决者高分相送 。。。DataList内嵌控件事件触发问题
问题:在服务器控件中加一载一个具有DATALIST内嵌的模板文件,想实现内嵌的DATALIST控件也具有编辑功能。为了便于说明,只列出大体格式
模板文件:Skin_Order.ascx
<asp:datalist id ="Order" runat="server">
<EditItemTemplate>
<table>
<tr>
<td><asp:textbox id="txtOrderNo" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "OrdrNo" ) %>'></td>
....
</tr>
</table>
</EditItemTemplate>
<ItemTemplate>
<table>
<tr>
<td<%# DataBinder.Eval(Container.DataItem, "OrdrNo" ) %></td>
....
<td><asp:linkbutton id="edit" runat="server" commandName="Edit" />
</tr>
</table>
<asp:datalist id ="OrderDetail" runat="server">
<ItemTemplate>
<table>
<tr>
<td<%# DataBinder.Eval(Container.DataItem, "productName" ) %></td>
....
<asp:linkbutton id="edit" runat="server" commandName="EditDetail" />
</tr>
</table>
</ItemTemplate>
<EditItemTemplate>
<table>
<tr>
<td><asp:textbox id ="txtProductName" runat="server" text='<%# DataBinder.Eval(Container.DataItem, "productName" ) %>'></td>
....
</tr>
</table>
</EditItemTemplate>
</asp:datalist>
</asp:datalist>
服务器控件:OrderControl.cs
...
public class OrderControl:WebControl, INamingContainer
{
private DataList dataList;
...
protected override void CreateChildControls()
{
// 加载皮肤
Control skin = Page.LoadControl("/Skin_Order.ascx");
DataList dataList = skin.FindControls("Order");
// 关联事件相应事件
this.dataList.ItemDataBound +=new DataListItemEventHandler(dataList_ItemDataBound);
....
if (!Page.IsPostBack)
shouldRebind = false;
}
protected override void OnPreRender(EventArgs e)
{
if (shouldRebind)
this.BindData(); //绑定事件
}
private void dataList_ItemDataBound(object sender,DataListItemEventArgs e){
DataList orderDetail = e.Item.FindControls("OrderDetail")
orderDatail.ItemCommand +=new DataListCommandEventHandler(orderDatail_ItemCommand);
....
}
}
执行情况,最外层的DATALIS控件可以实现新增、编辑、删除都功能,但最内层的DATALIST的事件没有触发,请各位在说说解决办法,另外用CODEHIDDEN方式可以实现,但最内层的DATALIST的事件名称需要在HTML代码中指定才行,否则不能触发最内层的DATALIST事件。。