将 List 数据绑定到中继器

本文关键字:Image 数据绑定 中继器 WebControls UI List System Web | 更新日期: 2023-09-27 18:33:16

>我试图将图像列表(System.Web.UI.WebControls.Image)绑定到中继器,但图像显示为损坏。当我在 ItemDataBound-event 中放置一个断点时,似乎没问题,DataItem 是正确的并且具有正确的 ImageUrl。然而,结果是错误的。

这段代码非常简单,但最后会更加复杂。将List<String>与 ImageUrls 绑定最终对我没有帮助,因为所有图像也将具有更多独特的属性。

中继 器:

<asp:Repeater ID="repButtons" runat="server" OnItemDataBound="repButtons_OnItemDataBound">
    <ItemTemplate>
        <asp:Image ID="imgButton" runat="server" />
    </ItemTemplate>
</asp:Repeater>

用图像列出:

List<System.Web.UI.WebControls.Image> myButtons = new List<System.Web.UI.WebControls.Image>();
Image myEditButton = new Image();
myEditButton.ImageUrl = "~/images/themes/pencil.png";
myButtons.Add(myEditButton);
repButtons.DataSource = myButtons;
repButtons.DataBind();

数据绑定:

protected void repButtons_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Image myImage = (Image)e.Item.DataItem;
        Image imgButton = (Image)e.Item.FindControl("imgButton");
        imgButton = myImage;
    }
}

将 List<System.Web.UI.WebControls.Image> 数据绑定到中继器

如果您更改为使用PlaceHolder而不是Image

<ItemTemplate>
    <asp:PlaceHolder ID="imgPlaceholder" runat="server" />
</ItemTemplate>

然后在 DataBound 事件中添加您的图像。

Image myImage = (Image)e.Item.DataItem;
PlaceHolder imgPlaceholder = (PlaceHolder)e.Item.FindControl("imgPlaceholder");
imgPlaceholder.Controls.Add(myImage);

不能按照您尝试的方式执行此操作的原因是,您基本上是在说imgButton现在是新创建的图像控件,而不是中继器中的图像控件。您认为您正在做的基本上是将该myImage的所有属性

创建并绑定列表<字符串>到中继器。列表中的每个字符串都是图像的 URL。更改转发器标记,如下所示 ->

<asp:Image ID="imgButton" runat="server" ImageUrl="DataBinder.Eval(Container.DataItem)" />

以下代码应该适合您:

<asp:Repeater ID="repButtons" runat="server" OnItemDataBound="repButtons_OnItemDataBound">
    <ItemTemplate>
        <asp:Image ID="imgButton" runat="server" ImageUrl='<%# Eval("ImageUrl") %>' />
    </ItemTemplate>
</asp:Repeater>

制作图像列表

List<System.Web.UI.WebControls.Image> myButtons = new List<System.Web.UI.WebControls.Image>();
Image myEditButton = new Image();
myEditButton.ImageUrl = "~/images/themes/pencil.png";
myButtons.Add(myEditButton);
repButtons.DataSource = myButtons;
repButtons.DataBind();