将List <system.web.ui.webcontrols.image>数据绑定到转发器</system.web.ui.webcontrols.image>

时间:2012-05-04 13:48:42

标签: c# asp.net

我试图将图像列表(System.Web.UI.WebControls.Image)绑定到转发器,但图像显示为已损坏。当我在ItemDataBound事件中放置断点时,似乎没关系,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;
    }
}

3 个答案:

答案 0 :(得分:1)

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

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

然后在DataBound事件中将您的Image添加到此。

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

你不能按照你尝试的方式这样做的原因是因为你基本上说imgButton现在是一个新创建的图像控件,而不是Repeater中的那个。你在想你正在做的是基本上采用myImage

的所有属性

答案 1 :(得分:0)

创建并绑定列表&lt; string&gt;转发。列表中的每个字符串都是图像的URL。更改转发器标记如下 - &gt;

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

答案 2 :(得分:0)

以下代码适合您:

<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();