请教repeater中嵌套datalist的问题
要显示的数据比较特殊,记录的条数不定,每条的字段数也不定,所以采用repeater中嵌套datalist。
aspx部分代码如下:
<asp:repeater id="rp" runat="server" DataMember="Master">
<ItemTemplate>
<asp:Label id="lblDetail" runat="server"></asp:Label>
<asp:DataList id="dl" runat="server">
<ItemTemplate>
<tr>
<td><%# DataBinder.Eval(Container.DataItem, "Type") %>
<%# DataBinder.Eval(Container.DataItem, "Name") %>
<%# DataBinder.Eval(Container.DataItem, "No") %>
</td>
<td>
<asp:Button ID="btnMove" Text="调换" Runat="server"></asp:Button></td>
<td>
<asp:Button ID="btnInsert" Text="迁入" Runat="server"></asp:Button></td>
<td>
<asp:Button ID="btnRemove" Text="迁出" Runat="server"></asp:Button></td>
</tr>
</ItemTemplate>
</asp:DataList>
</ItemTemplate>
<SeparatorTemplate>
<hr />
</SeparatorTemplate>
</asp:repeater>
.cs部分代码如下:
private void rp_ItemCreated(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
if (e.Item.ItemType == System.Web.UI.WebControls.ListItemType.Item || e.Item.ItemType == System.Web.UI.WebControls.ListItemType.AlternatingItem)
{
System.Web.UI.WebControls.DataList dl = (System.Web.UI.WebControls.DataList)e.Item.FindControl("dl");
dl.HeaderTemplate = LoadTemplate("Header.ascx");
dl.FooterTemplate = LoadTemplate("Footer.ascx");
System.Web.UI.WebControls.Label lbl = (System.Web.UI.WebControls.Label)e.Item.FindControl("lblDetail");
lbl.Text = ((System.Data.DataRowView)e.Item.DataItem).Row.ItemArray[1].ToString();
dl.DataSource = ds;
dl.DataMember = ((System.Data.DataRowView)e.Item.DataItem).Row.ItemArray[0].ToString();
dl.DataBind();
}
}
第一次提交,显示正常,当有其它提交时(比如点一个checkbox),此过程出错,dl、lbl均为空指针,也就是findcontrol没有结果。
判断IsPostBack会导致正常提交也没有显示。
如何解决?谢谢。