我需要创建一个数据绑定控件,其中每个项呈现<tbody><ItemTemplate></tbody>
。此外,我还想将<HeaderTemplate>
放在<thead>
而不是<tbody>
行中<asp:DataList>
。我需要完全控制项目模板。它需要能够呈现可编辑的行,如DataList
那样。
我相信我需要为此制作一个自定义控件(但如果没有,请告诉我 - 这会节省很多时间)。什么是最好的父类?我的猜测是DataList
或DataBoundControl
。
答案 0 :(得分:0)
我正在寻找的是<asp:Repeater>
,只需要一些额外的代码进行编辑,因为它没有<EditItemTemplate>
。
<强>的.ascx 强>
<asp:Repeater id="rItems" runat="server" OnItemCommand="rItems_ItemCommand" OnItemDataBound="rItems_ItemDataBound">
<HeaderTemplate>
<table>
<thead>...</thead>
</HeaderTemplate>
<ItemTemplate>
<tbody id="itemRows" runat="server">
...
<asp:Button ... CommandName="Edit" />
...
</tbody>
<tbody id="editItemRows" runat="server" visible="false">...</tbody>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<强> .ascx.cs 强>
private int m_editIndex = -1;
protected void rItems_ItemCommand(object sender, RepeaterCommandEventArgs e)
{
switch (e.CommandName)
{
case "Edit":
m_editIndex = e.Item.ItemIndex;
break;
... // Cancel, Update, Delete, etc
case "Cancel":
m_editIndex = -1;
break;
}
BindItemsDataSource();
}
protected void rItems_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item | e.Item.ItemType == ListItemType.AlternatingItem)
{
bool edit = e.Item.ItemIndex == m_editIndex;
HtmlGenericControl tbody = e.Item.FindControl("itemRows") as HtmlGenericControl;
tbody.Visible = !edit;
tbody = e.Item.FindControl("editItemRows") as HtmlGenericControl;
tbody.Visible = edit;
if (edit)
{
PopulateEditableFieldValues(e.Item);
}
}
}