将 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;
}
}
如果您更改为使用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();