2013-03-20 47 views
2

我想用C#多张图片添加到在ASP.net数据网格视图中的列如何的ItemTemplate添加到GridView编程

图像名称是在数据库中,一些用户将有10个图像和其他人将没有图像,有些会在两者之间的某处。

我想通了,我可以添加一个ItemTemplate,但我要的是负载以编程方式生成的数量,

这可能

<asp:GridView ID="dgvTopPlayers" runat="server" AutoGenerateColumns="False" 
     onrowdatabound="dgvTopPlayers_RowDataBound" 
     onrowcreated="dgvTopPlayers_RowCreated" ShowHeaderWhenEmpty="True"> 
     <Columns> 
      <asp:HyperLinkField DataNavigateUrlFields="UserID" 
       DataNavigateUrlFormatString="~/UserProfile.aspx?UserId={0}" 
       DataTextField="UserName" HeaderText="UserName" 
       /> 
      <asp:BoundField DataField="Last7Days" HeaderText="Last7Days" /> 
      <asp:BoundField DataField="LastMonth" HeaderText="LastMonth" /> 
      <asp:BoundField DataField="TotalPoints" HeaderText="TotalPoints" /> 
      <asp:BoundField DataField="IdeaCount" HeaderText="IdeaCount" /> 
      <asp:BoundField DataField="ChallengeCount" HeaderText="ChallengeCount" /> 
      <asp:TemplateField HeaderText="Badges" > 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("BadgeIcons") %>' 
         Tooltip='<%# Eval("BadgeIcons") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Image ID="Image1" runat="server" AlternateText='<%# Eval("BadgeIcons") %>' 
         ImageUrl='<%# Eval("BadgeIcons") %>' /> 
         <asp:Image ID="Image2" runat="server" AlternateText='<%# Eval("BadgeIcons") %>' 
         ImageUrl="~/Images/puzzleIcon.png" /> 
         <asp:Image ID="Image3" runat="server" AlternateText='<%# Eval("BadgeIcons") %>' 
         ImageUrl="~/IMAGES/caution.png" /> 
         <asp:Image ID="Image4" runat="server" AlternateText='<%# Eval("BadgeIcons") %>' 
         ImageUrl="~/IMAGES/reportabuse.png" /> 
         <asp:Image ID="Image5" runat="server" AlternateText='<%# Eval("BadgeIcons") %>' 
         ImageUrl="~/IMAGES/yellow_star.png" /> 
       </ItemTemplate> 


       <ItemStyle Width="35%" /> 


      </asp:TemplateField> 
     </Columns> 

    </asp:GridView> 

回答

1

广场内ItemTemplate面板或占位符,并添加图片因为你已经有了RowDataBound。

<asp:TemplateField HeaderText="Badges" > 
    <EditItemTemplate> 
     <asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("BadgeIcons") %>' 
     Tooltip='<%# Eval("BadgeIcons") %>'></asp:TextBox> 
    </EditItemTemplate> 
    <ItemTemplate> 
     <asp:Panel ID="ImagePanel".../> 
    </ItemTemplate> 
</asp:TemplateField> 


void dgvTopPlayers_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     // *** Cast to appropiate object *** 
     var user = e.Row.DataItem as User; 
     var panel = e.Row.FindControl("ImagePanel") as Panel; 
     var images = user.BadgeIcons.Split(',');  
     foreach(var img in images) { 
     panel.Controls.Add(new Image{ ID = UniqueID, ImageUrl = "~/IMAGES/" + img }); 
     } 
    } 
} 
+0

我喜欢这种方法,1个最后一个问题的所有字符串都在BADGEICONS,所以他们是一个字符串“img1.png,img2.png,img2.png,蝴蝶结......我重新访问Badgeicons代码在后面,badgeicons是列表的一部分 – 2013-03-20 17:25:44

+0

我更新了答案,请确保您投射'e.Row.DataItem'来合适对象,例如,如果数据源是DataView或DataTable,则为DataRowView。 – Win 2013-03-20 17:58:49