【问题标题】:How to add ItemTemplate to a gridview programatically如何以编程方式将 DataTemplate 添加到 gridview
【发布时间】:2013-03-09 21:58:36
【问题描述】:

我正在尝试使用 C# 将多个图像添加到 ASP.net 中数据网格视图的列中

图像名称在数据库中,一些用户将有 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>

【问题讨论】:

    标签: asp.net image 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 });
          }
       }
    }  
    

    【讨论】:

    • 我喜欢这种方法,最后一个问题,所有字符串都在 BADGEICONS 中,所以它们是字符串“img1.png,img2.png,img2.png,... 我要重新访问 Badgeicons in后面的代码,badgeicons 是列表的一部分
    • 我更新了答案。请确保您将e.Row.DataItem 转换为合适的对象。例如,DataRowView 如果数据源是DataView 或DataTable。
    猜你喜欢
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 2013-09-09
    • 1970-01-01
    相关资源
    最近更新 更多