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
5 svar · 601 visningar · startad av KrpSvedberg
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 %>
<% end if %>
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
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?
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
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
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'.