C# ASP.NET-嵌套中继器
我有一个由“Update_ID”标识的不同更新的中继器。每个“更新ID”都有许多与之关联的图像 因此,我决定在中继器内为图像嵌套一个中继器以进行更新 问题是,即使有数据要显示,图像中继器也不会出现 以下是ASP.NET中的代码:C# ASP.NET-嵌套中继器,c#,asp.net,repeater,C#,Asp.net,Repeater,我有一个由“Update_ID”标识的不同更新的中继器。每个“更新ID”都有许多与之关联的图像 因此,我决定在中继器内为图像嵌套一个中继器以进行更新 问题是,即使有数据要显示,图像中继器也不会出现 以下是ASP.NET中的代码: <asp:Repeater ID="RepeaterUpdates" runat="server" onitemcommand="RepeaterUpdates_ItemCommand"> <ItemTemplate> &
<asp:Repeater ID="RepeaterUpdates" runat="server" onitemcommand="RepeaterUpdates_ItemCommand">
<ItemTemplate>
<div style="border: thin solid #808080">
<table id="TableUpdates_Repeater" runat="server" style="width:100%; margin:auto; background-image:url(Resources/Icons/white-background.gif)">
<tr>
<td style="width:25%">
<br />
<asp:Label ID="LabelUpdateID_Repeater" runat="server" Text="Update ID" Enabled="false"></asp:Label>
<asp:TextBox ID="TextBoxUpdateID_Repeater" runat="server" Width="50px" Text='<%# Eval("Update_ID") %>' Enabled="false"></asp:TextBox>
</td>
</tr>
</table>
<asp:Repeater ID="RepeaterImages" runat="server">
<ItemTemplate>
<label>Hello</label>
<asp:TextBox Text='<%# DataBinder.Eval(Container.DataItem,"Image_ID") %>' runat="server"></asp:TextBox>
</ItemTemplate>
</asp:Repeater>
</div>
</ItemTemplate>
</asp:Repeater>
如前所述,即使有数据要显示,子中继器也不会显示。请问我怎样才能解决这个问题?谢谢而不是
onitemcommand
,请致电OnItemDataBound
将
RepeaterCommandEventArgs
更改为RepeaterItemEventArgs
而不是onitemcommand
,调用OnItemDataBound
除了@Curt之外,将
RepeaterCommandEventArgs
更改为RepeaterItemEventArgs
。下面是代码
代码隐藏
类图像
{
公共int图像标识;
}
受保护的void RepeaterUpdates\u ItemCommand(对象源,RepeaterCommandEventArgs e)
{
RepeaterItem=e.项;
TextBox Update_ID=(TextBox)item.FindControl(“TextBoxUpdateID_Repeater”);
尝试
{
conn5.Open();
使用(SqlCommand cmd5=newsqlcommand(“SelectImages”,conn5))
{
cmd5.CommandType=CommandType.StoredProcess;
添加(新的SqlParameter(“@update_id”,update_id.Text));
List Lst=新列表();
使用(SqlDataReader rdr5=cmd5.ExecuteReader())
{
while(rdr5.Read())
{
Lst.Add(新图像{Image\u ID=Convert.ToInt16(rdr5[“Image\u ID”]))});
}
if((item.ItemType==ListItemType.item)| |(item.ItemType==ListItemType.AlternatingItem))
{
Repeater ImageRepeater=(Repeater)item.FindControl(“RepeaterImage”);
ImageRepeater.DataSource=Lst;
ImageRepeater.DataBind();
}
}
}
}
最后
{
conn5.Close();
}
}
HTML
您应该注册ItemBoundData事件
<asp:Repeater ID="rp" runat="server" onitemdatabound="rp_ItemDataBound">
<ItemTemplate></ItemTemplate>
</asp:Repeater>
protected void rp_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
}
受保护的无效rp_ItemDataBound(对象发送方、RepeaterItemEventArgs e)
{
}
除了@Curt。下面是代码
代码隐藏
类图像
{
公共int图像标识;
}
受保护的void RepeaterUpdates\u ItemCommand(对象源,RepeaterCommandEventArgs e)
{
RepeaterItem=e.项;
TextBox Update_ID=(TextBox)item.FindControl(“TextBoxUpdateID_Repeater”);
尝试
{
conn5.Open();
使用(SqlCommand cmd5=newsqlcommand(“SelectImages”,conn5))
{
cmd5.CommandType=CommandType.StoredProcess;
添加(新的SqlParameter(“@update_id”,update_id.Text));
List Lst=新列表();
使用(SqlDataReader rdr5=cmd5.ExecuteReader())
{
while(rdr5.Read())
{
Lst.Add(新图像{Image\u ID=Convert.ToInt16(rdr5[“Image\u ID”]))});
}
if((item.ItemType==ListItemType.item)| |(item.ItemType==ListItemType.AlternatingItem))
{
Repeater ImageRepeater=(Repeater)item.FindControl(“RepeaterImage”);
ImageRepeater.DataSource=Lst;
ImageRepeater.DataBind();
}
}
}
}
最后
{
conn5.Close();
}
}
HTML
您应该注册ItemBoundData事件
<asp:Repeater ID="rp" runat="server" onitemdatabound="rp_ItemDataBound">
<ItemTemplate></ItemTemplate>
</asp:Repeater>
protected void rp_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
}
受保护的无效rp_ItemDataBound(对象发送方、RepeaterItemEventArgs e)
{
}
您尝试过调试吗?您的代码是否将正确的参数值传递给嵌套的repeater数据源?“您是否尝试过调试?”可能是我见过的最有趣的事情。您应该在ItemDataBound而不是ItemCommand中执行此操作。如果需要,可以在ItemCommand中更改可见性。但必须确保内部中继器是在页面加载中创建的,每个外部中继器项都是最新的,ItemDataBound就是这种情况。您尝试过调试吗?您的代码是否将正确的参数值传递给嵌套的repeater数据源?“您是否尝试过调试?”可能是我见过的最有趣的事情。您应该在ItemDataBound而不是ItemCommand中执行此操作。如果需要,可以在ItemCommand中更改可见性。但必须确保内部中继器是在page load the latest for every outer RepeaterItem中创建的,ItemDataBound就是这种情况。我尝试了您的建议,但出现了以下错误:说明:在编译服务此请求所需的资源时出错。请查看以下特定错误详细信息,并适当修改源代码。编译器错误消息:CS0123:RepeaterUpdate\u ItemCommand“匹配委托”System.Web.UI.WebControls.RepeaterItemEventHandler“没有重载@Matthew我已更新我的答案。您需要更改方法参数类型谢谢:)我会试试。@Curt我试过您的建议。但是,在中继器事件hanlder中,我有其他代码,例如:if(e.CommandName.Equals(“Delete”)),在进行更改后不起作用:sI agree。我在父itemTemplate中没有看到会触发onItemCommand的内容。或者@Matthew应该在父ItemTemplate中插入一个控件(button、linkbutton,…),该控件将触发onItemCommand并仅显示该项的图像。我尝试了您的建议,但出现了以下错误:说明:在编译服务此请求所需的资源时出错。请查看以下特定错误详细信息,并适当修改源代码。编译器错误消息:CS0123:RepeaterUpdate\u ItemCommand“匹配委托”System.Web.UI.WebControls.RepeaterItemEventHandler“没有重载@Matthew我已更新我的答案。您需要更改方法参数类型谢谢:)I w
<asp:Repeater ID="rp" runat="server" onitemdatabound="rp_ItemDataBound">
<ItemTemplate></ItemTemplate>
</asp:Repeater>
protected void rp_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
}