C# 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> &

我有一个由“Update_ID”标识的不同更新的中继器。每个“更新ID”都有许多与之关联的图像

因此,我决定在中继器内为图像嵌套一个中继器以进行更新

问题是,即使有数据要显示,图像中继器也不会出现

以下是ASP.NET中的代码:

<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)
{

}