如何在ListView控件中调用ItemTemplate中的函数

时间:2011-05-25 15:58:45

标签: c# asp.net

我有一个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>

2 个答案:

答案 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事件。在事件处理程序中,检查数据项,并相应地修改内容。