我有一个ListView控件,需要在ItemTemplate中插入一些图片。
<asp:ListView runat="server" ID="VareListView">
<LayoutTemplate>
<table cellpadding="2" runat="server" id="tblVarer" style="width:100%;border-collapse:collapse;" >
<tr runat="server" id="itemPlaceholder">
</tr>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr id="Tr1" style="height:100px" class="tblRow" runat="server" >
<td valign="top">
<asp:Image ID="ProduktImage" runat="server" ImageUrl='<%# string.Format("images_produkt/{0}.jpg",Eval("Varenr"))%>' />
</td>
<td valign="top" class="">
<asp:Label ID="LastNameLabel" runat="server" Text='<%# Eval("Varenavn1")%>' />
<br />
<asp:Label ID="FirstNameLabel" runat="server" Text='<%# string.Format("Varenr: {0}",Eval("Varenr")) %>' />
<br />
<asp:Label ID="Varenavn2" runat="server" Text='<%#Eval("Varenavn2") %>' />
<br />
<asp:Label ID="Varenavn3" runat="server" Text='<%#Eval("Varenavn3") %>' />
<br />
此时我需要插入图片,如果文件名包含“Varenr” 像这样的东西
DirectoryInfo myDir = new DirectoryInfo(Request.PhysicalPath.Substring(0, Request.PhysicalPath.LastIndexOf("\\")) + "/images_produkt/montering");
FileInfo[] files = myDir.GetFiles(varenr + "*");
if (files.Length != 0)
{
foreach (FileInfo fil in files)
{
Image img = new Image();
img.ImageUrl = "/images_produkt/montering/" + fil.Name;
img.Height = 20;
img.Width = 20;
}
}
但我现在知道如何让这个工作:) ListView代码的其余部分就像这样
</td>
<td valign="top" align="right" class="">
<asp:Panel ID="Enhet" runat="server" Visible='<%#Eval("Enhet").ToString() != String.Empty %>'>
<asp:Label ID="Pris" runat="server" Text='<%# string.Format("{0} kr",Eval("Pris2"))%>' />
<br />
</asp:Panel>
<asp:Label ID="Vekt" runat="server" Text='<%# string.Format("{0} Kg",Eval("Vekt"))%>' />
<br />
<asp:TextBox ID="Antall" runat="server" Text="1" Width="20"></asp:TextBox>
<asp:Image ID="Image1" runat="server" ImageUrl='style/shoping01.jpg' Width="22" Height="22" />
</td>
</tr>
答案 0 :(得分:2)
使用ItemDataBound事件并将PlaceHolder控件放置在您希望插入图像的位置,在ItemDataBound事件中找到Placeholder控件并动态添加图像,您的代码应该是这样的。
protected void yourdatalist_ItemDataBound(object sender, DataListItemEventArgs e)
{
var placeHolder = (PlaceHolder)e.Item.FindControl("YourPlaceholderIdHere")
//do what you want
placeHolder.Controls.Add(your images)
}
我没有对此进行过测试,但希望可以给你和想法。
如果您想要更多地控制Html,您可以嵌套DataList并为其分配数据源
e.g。
<asp:DataList ID="nestedImages" runat="server"
DataSource="<%# GetDataSourceForImages(((ListViewItem)Container).DataItem) %>" >
<ItemTemplate>
your html here
</ItemTemplate>
GetDataSourceForImages是一个受保护的方法,它可以执行您想要的操作并返回一个将用作数据源的列表,当然您必须对其进行优化。
希望有所帮助
答案 1 :(得分:0)
您可以从ListView控件处理ItemDataBound事件。在事件处理程序中,检查数据项,并相应地修改内容。