Avatar billede ha9953 Nybegynder
14. oktober 2003 - 12:01 Der er 10 kommentarer og
1 løsning

Specified cast is not valid.

Jeg har følgende datagrid:

    <asp:datagrid id="DataGridFotos"  Width="100%" AutoGenerateColumns="False" AllowSorting="true" OnSortCommand="Gridsorter_DataGridFotos" CssClass="Gridomkreds" runat="server" GridLines="Vertical" CellPadding="3" AllowPaging="true" PageSize="15" OnpageIndexChanged="SideSkift_DataGridFotos">
        <PagerStyle position="Bottom" CssClass="GridPager" HorizontalAlign="right" mode="NumericPages" />
        <HeaderStyle CssClass="GridHead"  />
        <FooterStyle CssClass="GridFoot" />                           
        <AlternatingItemStyle CssClass="GridAlt" />
        <columns>
            <asp:TemplateColumn ItemStyle-Width="30" HeaderStyle-VerticalAlign="Top" ItemStyle-HorizontalAlign="left" ItemStyle-VerticalAlign="Top">
                <ItemTemplate>                                                                                                                                                                                       
                    <%# FotoSkifter(container.dataitem("foto_navn"),e) %>
                </ItemTemplate>
            </asp:TemplateColumn>
            <asp:BoundColumn DataField="foto_id" SortExpression="foto_id" HeaderText="FotoId" HeaderStyle-Width="70" HeaderStyle-HorizontalAlign="left" HeaderStyle-VerticalAlign="Top" ItemStyle-HorizontalAlign="left" ItemStyle-VerticalAlign="Top" />
            <asp:BoundColumn DataField="foto_mappe" SortExpression="foto_mappe" HeaderText="Kategori" HeaderStyle-VerticalAlign="Top" ItemStyle-HorizontalAlign="left" ItemStyle-VerticalAlign="Top" />
            <asp:BoundColumn DataField="foto_navn" SortExpression="foto_navn" HeaderText="Filnavn" HeaderStyle-VerticalAlign="Top" ItemStyle-HorizontalAlign="left" ItemStyle-VerticalAlign="Top" />
        </columns>
    </asp:datagrid>                   

hvor jeg kalder følgende funktion:

    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?
Avatar billede odegaard Nybegynder
14. oktober 2003 - 18:51 #1
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) %>
Avatar billede ha9953 Nybegynder
23. oktober 2003 - 02:13 #2
Nu får jeg desværre denne fejl?

Compiler Error Message: BC30201: Expression expected.

Source Error:



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>
Avatar billede odegaard Nybegynder
05. november 2003 - 22:55 #3
Hvis du bruger C# så hedder det:
<%# =FotoSkifter(container.dataitem["FotoFil"].ToString(),e) %>

(klammer i stedet for parentes)
Avatar billede ha9953 Nybegynder
05. november 2003 - 23:00 #4
jeg bruger vb - men ellers tak - har lavet det som en custom control i stedet for - men det driller desværre også lidt
Avatar billede ha9953 Nybegynder
05. november 2003 - 23:02 #5
Men hvis du kan læse nedenstående giver jeg da et par point ;-)

Hvorfor vil den ikke overfører værdierne bredde og hojde til fotoet?

Option Explicit
Option Strict


Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Drawing
Imports System.Drawing.Imaging
Imports Microsoft.VisualBasic
Imports System.Configuration
Imports System.IO

Namespace FotoFunktioner

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 

End Class


End Namespace
Avatar billede odegaard Nybegynder
05. november 2003 - 23:11 #6
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?
Avatar billede ha9953 Nybegynder
05. november 2003 - 23:21 #7
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" />
Avatar billede odegaard Nybegynder
05. november 2003 - 23:29 #8
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
Avatar billede odegaard Nybegynder
05. november 2003 - 23:30 #9
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
Avatar billede ha9953 Nybegynder
05. november 2003 - 23:42 #10
send lige et svar - det lykkedes med det sidste du skrev - TUSIND TAK!
Avatar billede odegaard Nybegynder
05. november 2003 - 23:48 #11
øhm jeg har jo svaret
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester