webForumDet fria alternativet

If sats i asp.net

.NET

5 svar · 601 visningar · startad av KrpSvedberg

Medlem sedan okt. 200558 inlägg
Frågan#1

Jag har en repeater som visar nyheter, där det i vissa fall finns bild kopplad, och i vissa fall inte. Har försökt mig på en If sats, men får det icke att fungera.

<% if  Container.DataItem("refbildid") <> "" then %>
<img src='_downloadTest.aspx?id=<%# Container.DataItem("refbildid") %>' align=left width=200px>
<% else %>
&nbsp;
<% end if %>
Medlem sedan juli 20011 084 inlägg
#2

asp 3.0 ajabaja... ;)

Den finaste lösningen är väl att lägga till en OnItemDataBound på repeatern och via CodeBehind göra en if-sats som sätter Visible = true/false på en asp:Image

Medlem sedan okt. 200558 inlägg
#3

Har aldrig använt varken asp:Image eller OnItemDataBound, så har chansat ganska friskt...

<asp:Image ID=imgRpt runat=server Visible=True ImageUrl='_downloadTest.aspx?id=<%# Container.DataItem("refbildid") %>'></asp:Image>

Detta fungerar inte. Han fattar inte att de e ett dynamiskt värde. Vad använder jag OnItemDataBound till?

Medlem sedan juni 20019 519 inlägg
#4

Sökte lite:
http://www.developerfusion.co.uk/forums/thread/104299/#104299

kanske hjälper dig... annars kom till skolan så kan vi se på det :p

Medlem sedan juli 20011 084 inlägg
#5

Om du inte känner till varken asp:Image eller OnItemDataBound kanske du bör läsa igenom lite grundläggande artiklar eller böcker angående asp.net. Allting blir så mycket enklare när man kommer ur det hemska asp 3.0 träsket :e

Och som voigtann länkade till så kan det se ut ungefär så här: (Visserligen i C#, men om du precis börjat med .net bör du byta för det är mycket trevligare(tycker jag... ;))

<asp:Repater id="rptNews" OnItemDataBound="rptNews_ItemDataBound" runat="server">
  <ItemTemplate>
    <asp:Image id="imgRtp" runat="server" />
  </ItemTemplate>
</asp:Repeater>

och sedan i code-behind

protected void rptNews_ItemDataBound(object sender, RepeaterItemEventArgs e) {
  if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
    Image imgRpt = (Image)e.Item.FindControl("imgRpt");
    
    if ((string)((DataRowView)e.Item.DataItem)["refbildid"] != null) {
      imgRpt.ImageUrl = String.Format("_downloadTest.aspx?id={0}",(string)((DataRowView)e.Item.DataItem)["refbildid"]);
    } else {
      imgRpt.Visible = false;
    }
  }
}

Skrivet ur huvudet så med reservation för slarvfel. Samt att jag själv är ganska ny på asp.net... så någon mer erfaren får gärna rätta mig om jag har fel :stud

Medlem sedan okt. 200558 inlägg
#6

Har försökt översätta till VB. Här är resultatet:

Protected Sub rptNews_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs)
        If ((e.Item.ItemType = ListItemType.Item) _
                    OrElse (e.Item.ItemType = ListItemType.AlternatingItem)) Then
            Dim imgRpt As System.Web.UI.WebControls.Image = CType(e.Item.FindControl("imgRpt"), System.Web.UI.WebControls.Image)
            If (Not (CType(CType(e.Item.DataItem, DataRowView)("refbildid"), String)) Is Nothing) Then
                imgRpt.ImageUrl = String.Format("_downloadTest.aspx?id={0}", CType(CType(e.Item.DataItem, DataRowView)("refbildid"), String))
            Else
                imgRpt.Visible = False
            End If
        End If
End Sub

Felmeddelande:
Unable to cast object of type 'System.Data.Common.DbDataRecord' to type 'System.Data.DataRowView'.

280 ms totalt · 3 externa anrop · v20260731065814-full.f363f448
153 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)