在Gridview中是否可以显示代表不同数据库值的不同图像?

时间:2014-08-11 01:00:04

标签: asp.net vb.net gridview

我有一个名为has_Amenities的字段名称。此字段名可以同时采用一个,两个,三个,四个或五个值。

价值观是水,电,宠物,全连接,全部

  • 如果has_Amenities =“电力”,则显示电力图标,同时显示宠物的空白图标,完整连接和水龙头。

  • 如果has_Amenities =“pets”,则显示宠物图标以及用于电力,完全连接和水的空白图标

  • 如果has_Amenities =“water”,则显示水图标,同时显示宠物的空白图标,完整连接和电力。

  • 如果has_Amenities =“full”,则显示完整的连接图标,并显示宠物,水和电的空白图标。

  • 如果has_Amenities =“全部”,则表示它有电,水,完全连接和宠物。显示所有四个图标。

我们正在使用gridview和gridview控件id是gridview1。

下面的代码只显示一个值 - 电力。

 <asp:TemplateField HeaderText="Facility Has">
   <ItemTemplate>
     <asp:Image ID="ImageDetailItem" width="22" height="22" ImageUrl='<%# IIF(CONVERT.ToString(Eval("has_Amenities")) = "Electricity", "~/images/icon_amps_50.gif", Eval("location","~/images/icon_waterfront_no.gif")) %>' runat="server" />                                        
   </ItemTemplate>
 </asp:TemplateField>

这不是正确的解决方案。

如何使用上述所有IF条件以及如何在一个单元格中显示所有四个图标?

下面是如何布局的图片。

enter image description here

3 个答案:

答案 0 :(得分:1)

您可以将此逻辑放在RowDataBound事件中。当数据行(由RowDataBound对象表示)绑定到GridViewRow控件中的数据时,将引发GridView事件。这使您能够提供执行自定义例程的事件处理方法,例如,每当发生此事件时,修改绑定到行的数据的值。

以下是您可以用于解决问题的示例代码。

Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
    If e.Row.RowType = DataControlRowType.DataRow Then

      Dim drv As Common.DbDataRecord = CType(e.Row.DataItem, Common.DbDataRecord)
      e.Row.Cells(1).Text = "<i>" & e.Row.Cells(1).Text & "</i>"
      Image img =  e.row.Cells(7).FindControl("image1")

      if drv("has_Amenities") = "Electricity" Then
          img.ImageUrl = "~/images/icon_amps_50.gif"
      elseif
      ' ////////////////////////////////
      ' You can place other logic here...


    End If
End Sub

答案 1 :(得分:0)

我在asp.net webforms中使用c#做了类似的事情(我希望VB没有太大区别)

 <asp:TemplateField>
               <ItemTemplate>
                   <asp:Image runat="server" ImageUrl="<%# ProtectedIsVisible(Item.HasAmenties,"Electricity")? "~/electricity.gif":"~/blank.gif" %>"/>
                   <asp:Image ID="Image1" runat="server" ImageUrl="<%# ProtectedIsVisible(Item.HasAmenties,"Pets")? "~/pets.gif":"~/blank.gif" %>"/>
                   <asp:Image ID="Image2" runat="server" ImageUrl="<%# ProtectedIsVisible(Item.HasAmenties,"Water")? "~/water.gif":"~/blank.gif" %>"/>
               </ItemTemplate>
           </asp:TemplateField>

页面类有protected方法,包含所有逻辑

protected bool ProtectedIsVisible(string[] values,string tag)

我使用了GridView的ItemType属性,设置为强类型模型类,类似于

class Model{ public string[] HasAmenties {get;set; }
<asp:GridView ItemType="MyApplication.Model" runat="server" ID="MyGridView">

答案 2 :(得分:0)

c)SELECT Name,#game
  FROM Istitute
  WHERE(SELECT COUNT (IDGAME) as #game
  FROM Sponsor,Game,Istitute
  WHERE(IDGAME=Game.id AND IDISTITUTE=Istitute.id AND VERSIONGAME=Game.Version))
  HAVING #game<=10