Avatar billede disco_keld Nybegynder
31. marts 2003 - 09:25 Der er 19 kommentarer og
1 løsning

Tjekke på om noget er DbNull?

God morgen....

Jeg må stadig have små øjn, for jeg kan ikke få det her til at fjunge! :-(

Har et hyperlink som ligger i en repeater.

Indholdet af det link henter jeg fra Db.

Nu vil jeg tjekke på om linket indeholder noget, hvis ikke det gør det så skal den sættes til visible = false.

<asp:hyperlink                    id="lnkDownload"
    text='<%# "<b>Download:</b> " & DataBinder.Eval(Container.DataItem, "DownloadText") %>'            navigateurl='<%# DataBinder.Eval(Container.DataItem, "DownloadUrl") %>'            runat="server"/>


-----------------------------

If lnkDownload.Text = String.Empty Then
                    lnkDownload.Visible = False
                End If

--------------------------------

Hvorfor virker det her ikke?

:-(

Mvh

DK
Avatar billede burningice Nybegynder
31. marts 2003 - 09:40 #1
prøv

lnkDownload.Text.Length == 0 Then
Avatar billede disco_keld Nybegynder
31. marts 2003 - 09:45 #2
Samme som før! :-(

Object reference not set to an instance of an object

Line 85:                If lnkDownload.Text.Length = 0 Then
Line 86:                    lnkDownload.Visible = False
Line 87:                End If
Avatar billede burningice Nybegynder
31. marts 2003 - 09:53 #3
disco_keld>> ah... ligger din lnkDownload i et datagrid?
Avatar billede disco_keld Nybegynder
31. marts 2003 - 09:53 #4
yep!
Avatar billede burningice Nybegynder
31. marts 2003 - 09:58 #5
disco_keld>> så kan du ikke få fat i en reference til din lnkDownload på den måde...

findes der ikke en visible-parameter til <asp:hyperlink> ? i så fald kan du databinde den til en function der returnerer typen bool.
Avatar billede disco_keld Nybegynder
31. marts 2003 - 10:06 #6
hvorfor kan man ikke det?

visible så tænker du på den her ikke?

lnkDownload.Visible = true eller false
Avatar billede burningice Nybegynder
31. marts 2003 - 10:14 #7
disco_keld>> nej, jeg tænker på

<asp:hyperlink visible="false" />

ved den kode du skrev skal man jo stadigvæk have en reference til kontrollen, og det er jo det du ikke har.
Grunden til at det er så svært at få en reference, er at din lnkDownload bliver til et child til selve datagrid-kontrollen, så derfor skal du loope igennem alle childs for at finde den rigtige.
Avatar billede burningice Nybegynder
31. marts 2003 - 10:18 #8
... du kan også bruge ItemDataBound eventen til at tjekke om der er nogen værdi, og ud fra det afgøre om den skal være visible eller ikke.
Avatar billede disco_keld Nybegynder
31. marts 2003 - 10:21 #9
hmmmm...

den ligger i en repeator.

Men hvis jeg sætter den til false som default som du har gjort, hvad så?

Hvordan for jeg sat den til true hvis den ikke er tom?
Avatar billede burningice Nybegynder
31. marts 2003 - 10:31 #10
disco_keld>>... som jeg skrev... ved at databinde den til en funktion der enten returnerer true eller false
Avatar billede torbenmelander Nybegynder
31. marts 2003 - 10:37 #11
Kunne du ikke ændre lidt i din datasource så den kun viser værdier hvor "DownloadText" er anderledes end "", altså lave om på din sql-sætning:

SELECT * FROM [tblNavn] WHERE [tblNavn].[DownloadText] <> '';

og så binde den bagefter ...

Et problem med ovenstående er at Text aldrig vil være tom da du jo udskriver følgende "<b>Download:</b>" ... men der kan selvfølgelig også tjekkes på om teksten er lig med det ...

cyberfessor >> Kan du ikke kigge på mit spørgsmål når du får tid: http://www.eksperten.dk/spm/335385
Avatar billede mufoxe Nybegynder
31. marts 2003 - 10:38 #12
Hvis den ligger i et DataGrid, kan du bruge FindControl(<navn>) til at få en reference til kontrollen. Jeg plejer at fyre den af i ItemBound eventen for DataGrid'et.
Avatar billede burningice Nybegynder
31. marts 2003 - 10:53 #13
torbenmelander>> jeg har skam kigget... men jeg må indrømme at jeg ikke har alverdens forstand på asp.net. Det er længe siden jeg har rodet med det på proffessinelt plan... al min tid går for tiden med winforms-programmering, dog dog til dels ligner webforms. Bare ikke når det kommer til blanding af serverside og clientside programmering ;)
Avatar billede torbenmelander Nybegynder
31. marts 2003 - 10:55 #14
cyberfessor >> Okay ... det var ærgeligt .. Men tak for forsøget :)
Avatar billede odegaard Nybegynder
31. marts 2003 - 11:09 #15
Du skal skrive
If nkDownload.Text Is DBNull.Value Then
    lnkDownload.Visible = False
End If
Avatar billede burningice Nybegynder
31. marts 2003 - 11:12 #16
odegaard>> det kan han ikke når man ikke har nogen reference til lnkDownload !!
Avatar billede burningice Nybegynder
31. marts 2003 - 14:36 #17
disko>> du kan få en reference til din control gennem ItemDataBound-en...

pseodo-kode:

If e.Item.ItemType = DataListType.Item Then
    Dim h As HyperLink = CType(e.Item.FindControl("lnkDownload"), HyperLink)
    ' h er nu en reference til din hyperlink-control
End If
Avatar billede disco_keld Nybegynder
31. marts 2003 - 14:59 #18
Fik det til at virke ved hjælp af denne metode fra Cyberfessor:

Public Sub rpProductDetails_onitemdatabound(ByVal Sender As Object, ByVal e As RepeaterItemEventArgs)
        If e.Item.ItemType = ListItemType.Item Then
            Dim h As HyperLink = CType(e.Item.FindControl("lnkDownload"), HyperLink)
            Dim lbl As Label = CType(e.Item.FindControl("lblText"), Label)
            If h.Text.Length = 0 Then
                lbl.Visible = False
            Else
                lbl.Text = "Download: "
                lbl.Font.Bold = True
            End If
        End If
    End Sub
Avatar billede burningice Nybegynder
31. marts 2003 - 15:00 #19
lækkert :)
Avatar billede disco_keld Nybegynder
31. marts 2003 - 15:00 #20
points for fessor!!!!

og tak for hjælpen til jer andre også! ;-)
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