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 · 620 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
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
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
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'.