Public Function fotoskifter(FotoFilNavn as string, e As System.Web.UI.WebControls.DataGridItemEventArgs)
end Function
desværre får jeg følgende fejl:
Exception Details: System.InvalidCastException: Specified cast is not valid.
Source Error:
Line 79: <asp:TemplateColumn ItemStyle-Width="30" HeaderStyle-VerticalAlign="Top" ItemStyle-HorizontalAlign="left" ItemStyle-VerticalAlign="Top"> Line 80: <ItemTemplate> Line 81: <%# FotoSkifter(container.dataitem("foto_navn"),e) %> Line 82: </ItemTemplate> Line 83: </asp:TemplateColumn>
er der nogen der kan give mig en løsning på dette?
Du skal have ligmed-tegn foran. Desuden bør du caste dataitem("foto_navn") til en string, da denne ikke implicit er en string. Dvs. <%# =FotoSkifter(container.dataitem("foto_navn").ToString(),e) %>
Line 54: <asp:TemplateColumn HeaderText="FotoFil" SortExpression="FotoFil" HeaderStyle-HorizontalAlign="left" HeaderStyle-VerticalAlign="top" ItemStyle-HorizontalAlign="left" ItemStyle-VerticalAlign="top"> Line 55: <ItemTemplate> Line 56: <%# =FotoSkifter(container.dataitem("FotoFil").ToString(),e) %> Line 57: </ItemTemplate> Line 58: </asp:TemplateColumn>
Public Class FotoSkift : Inherits System.Web.UI.WebControls.Image
Dim _FotoHojde as integer Dim _FotoBredde as integer Dim _FotoPlacering as string
Public Property FotoHojde() As Integer Get Return _FotoHojde End Get Set _FotoHojde = value End Set End Property
Public Property FotoBredde() As Integer Get Return _FotoBredde End Get Set _FotoBredde = value End Set End Property
Public Property FotoPlacering() As string Get Return _FotoPlacering End Get Set _FotoPlacering = value End Set End Property
Public Sub New() try dim FotoWeb as string = ConfigurationSettings.AppSettings("webadresse") & ConfigurationSettings.AppSettings("fotomappe") & _FotoPlacering dim FotoServer as string = ConfigurationSettings.AppSettings("serveradresse") & ConfigurationSettings.AppSettings("fotomappe") & _FotoPlacering
if File.Exists(FotoServer) Then Dim currentImage as System.Drawing.Image = System.Drawing.Image.fromfile (FotoServer) Dim imgHeight as integer = currentImage.Height Dim imgWidth as integer = currentImage.Width
if imgwidth > _FotoBredde then do imgheight = System.Convert.ToInt32(imgheight * 0.9) imgwidth = System.Convert.ToInt32(imgwidth * 0.9) loop while imgwidth > _FotoBredde end if
if imgheight > _FotoHojde then do imgheight = System.Convert.ToInt32(imgheight * 0.9) imgwidth = System.Convert.ToInt32(imgwidth * 0.9) loop while imgheight > _FotoHojde end if
me.width = new Unit (imgwidth) me.height = new Unit (imgheight) else me.visible = false end if catch t as exception me.visible = false end try End Sub
burde din property egentlig ikke være en unit, og ikke en integer?
Lige et sidespring også. Hvorfor bruger du: do imgheight = System.Convert.ToInt32(imgheight * 0.9) imgwidth = System.Convert.ToInt32(imgwidth * 0.9) loop while imgheight > _FotoHojde
istedet for blot at beregne den nye størrelse direkte?
Det kan måske godt være, men ovenståendee fungerer fint hvis jeg bruger det son en normal function, men det vil altså ikke når jeg laver det om til en usercontrol.
Problemet er at værdierne _FotoBredde og _Fotohojde ikke bliver hentet frem selv om jeg har defineret dem i <foto:fotoskift id="foto1" FotoHojde="100" FotoBredde="100" runat="server" />
Hmm her er lidt kode fra en af mine egne usercontrols. Der er ikke meget forskel, ud over at jeg ikke explicit erklærer dem public, og at jeg gemmer propertien i Viewstate i stedet for i en privat variabel. Samtidigt erklærer jeg nogle parametre til VS.NET designeren (dem i klammer inden propertyen)
<Bindable(True), Category("Map"), DefaultValue("")> Property [Layers]() As String Get Return ViewState("Layers") End Get Set(ByVal Value As String) ViewState("Layers") = Value End Set End Property
Når jeg tænker over det, så er det sikkert fordi du sætter værdierne i new() konstruktoren. Nu kan jeg ikke lige huske rækkefølgen af events, men det skulle ikke undre mig at de bliver overskrevet i et senere event. Prøv at smide koden ind i render-eventet istedet: Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) 'sæt værdier her me.width = new Unit (imgwidth) 'osv... MyBase.Render(writer) End Sub
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.