Hej, <code> Tack för svaret! Jag löste det. Patrik, Saxat från Books Online: Mikael,Anropa funktion från Repeater
Jag har en repeater på aspx sida. I en av kolumner visar jag en ikon för vilken status aktuell post har(Open, Closed eller Archived).
Ikonen är en asp:Image och har id "imgStatusIcon", så här:
<code>
<asp:Image id="imgStatusIcon" runat="server" ImageUrl="Images/icon_open.gif" AlternateText="Open"></asp:Image>
</code>
För att visa rätt ikon har jag en publik funktion i code behind som heter GetStatusIcon som tar emot två datum.
Min först fråga är, hur skickar jag in två värden till funktionen? Skickar jag in ett funkar det, skickar jag in två smäller det..
Så här skriver jag:
<code>
<%# GetStatusIcon(DataBinder.Eval(Container.DataItem, "close_date"), DataBinder.Eval(Container.DataItem, "archive_date")) %>
</code>
Det var den första enkla(?) frågan , hur man skickar in de två datumen?
Sen när det är löst undrar jag hur jag ändrar ImageUrl i min funktion så att rätt ikon visas och VAR i repeatern lägger jag funktionsanropet?
Så här skulle jag vilja att funktion var typ:
<code>
Public Function GetStatusIcon(ByVal dCloseDate as Date, ByVal dArchiveDate as Date) As String
If dCloseDate <> "" and dArchiveDate <> "" Then
return imgStatusIcon.ImageUrl = "Images/icon_archived.gif
ElseIf blablablabla
....osv
End If
End Function
</code>
Jag kanske är helt ute o cyklar här, men jag tror inte det....
Någon som lust att hjälpa mig?
/JockeSv: Anropa funktion från Repeater
ImageUrl=' <%# GetIcon ( Container.DataItem ) %> '
</code>
och:
<code>
Public Function GetIcon ( DataItem as Object ) As String
Dim drv As DataRowView = CType(DataItem, DataRowView)
If drv("begindate") = "" and drv("enddate") = "" Then
Else If
End If
End Function
</code>Sv: Anropa funktion från Repeater
Det blir inte rikigt rätt bara.
Det kommer inte ut någon bild alls. Tittar man i html-koden som genereras, så blir det en image-tag utan "src".
Så här har jag skrivit nu.
Först:
<code>
<asp:Image id="imgStatusIcon" runat="server" ImageUrl="<%# GetStatusIcon ( Container.DataItem ) %>" AlternateText="Open"></asp:Image>
</code>
och sen:
<code>
Public Function GetStatusIcon(ByVal DataItem As Object) As String
Dim drv As DataRowView = CType(DataItem, DataRowView)
If drv("archive_date") = "" And drv("close_date") = "" Then
Return "Images/icon_open.gif"
Else
Return "Images/icon_closed.gif"
End If
End Function
</code>
/JockeSv: Anropa funktion från Repeater
Istället för
<code>
If dsv("archive_date") = "" Then
</code>
skrev jag:
<code>
If IsDbNull(dsv(""archive_date")) Then
</code>
Då funkar det.
Tack igen för hjälpen!
/JockeSv: Anropa funktion från Repeater
Vad old school med <b>CType</b> :) Givetvis skall du dra fram <b>DirectCast</b> ur hatten :-D *tetas*Sv: Anropa funktion från Repeater
The difference between the two keywords is that CType succeeds as long as there is a valid conversion defined between the expression and the type, whereas DirectCast requires the run-time type of an object variable to be the same as the specified type. If the specified type and the run-time type of the expression are the same, however, the run-time performance of DirectCast is better than that of CType.
Innebär att CType fungerar oftare (alltså när inte datatyperna til 100% matchar)
DirectCast får ett runtimefel när du skriver följande kod:
Dim a As Integer
DirectCast( a, decimal)
Byt ut Directcast mot CType, så funkar det...
/mickeSv: Anropa funktion från Repeater
Um ? Jag rekommonderade <b>DírectCast</b> i en situation där det finns en direktrelation. Genom att göra detta så, precis som texten du saxade säger, för du en bättre run-time performance. Givetvis spealr det ingen roll för ett enstaka anrop, men om man lär sig använda DirectCast på rättsätt i hela sitt program på alla ställen så blir det andra bullar.
Så jag förstår inte riktig var du ville komma med ditt inlägg eller om det bara var ett komplement till mitt inlägg. =)