Avatar billede karsten_larsen Praktikant
04. oktober 2007 - 19:05 Der er 14 kommentarer og
1 løsning

gennemløbe control på en side

har en sub, som tager følgende input:

Sub Advarsel(ByVal RadioButtonListNumber As RadioButtonList, ByVal TabelCellNumber As TableCell)

Ville derfor gerne kunne gøre følgende ved en button event:

For i = 0 to 100
Advarsel(RadioButtonList & i, TableCell & i)
next

Men det virker ikke. Hvad gør jeg galt?

:-) karsten_larsen
Avatar billede neoman Novice
04. oktober 2007 - 19:09 #1
Øh - kan du lige fortælle hvad du har ? For signaturen på din sub er "mærkelig", da dine parameternavne antyder et nummer, mens de tilhørende typer er klasser.

Med "Hvad du har" mener jeg hvilke kontroller ligger i hvad på din side ?
Avatar billede neoman Novice
04. oktober 2007 - 19:12 #2
og jeg ville blive ret forbavset hvis du kunne konkatenere to strings på denne måde, og få en ikke-string men en reference til en kontrol ud af det - er det noget som virker i .net ?
Avatar billede karsten_larsen Praktikant
04. oktober 2007 - 19:13 #3
Mine rbl har følgende id

radibuttonlist1 og placeret i tableCell1
radibuttonlist2 og placeret i tableCell2
etc

    Sub Advarsel(ByVal RadioButtonListName As RadioButtonList, ByVal TabelCellName As TableCell)

        If RadioButtonListName.SelectedValue = "" Then
            TabelCellName.CssClass = "tableAlertOn"
        End If
        If RadioButtonListName.SelectedValue <> "" Then
            TabelCellName.CssClass = "tableAlertOff"
        End If

    End Sub
Avatar billede neoman Novice
04. oktober 2007 - 19:29 #4
If RadioButtonListName.SelectedValue <> "" Then
            TabelCellName.CssClass = "tableAlertOff"
        End IfFor each workRow as TableRow in myTable.Rows
Dim myList as RadioButtonList
Dim cellIndex as Integer=0
Dim controlindex as Integer=0

myList = CType(workRow.Cells(cellIndex).Controls(controlIndex),RadioButtonList) ' så fremt du kun har en rbl i cellen, og cellen er den første i rækkem

If myList.SelectedValue <> "" Then
'i øvrigt er det godt at checke på SelectedIndex (som er -1 hvis intet er sat), fordi  det er 'uafhængigt af værdierne, så man ikke skal kode om hvis man laver om på værdierne senere
            workRow.Cells(cellIndex).CssClass = "tableAlertOff"
End If


'osv osv


next
Avatar billede neoman Novice
04. oktober 2007 - 19:30 #5
oopz - gik galt med copy/paste:

For each workRow as TableRow in myTable.Rows
Dim myList as RadioButtonList
Dim cellIndex as Integer=0
Dim controlindex as Integer=0

myList = CType(workRow.Cells(cellIndex).Controls(controlIndex),RadioButtonList) ' så fremt du kun har en rbl i cellen, og cellen er den første i rækkem

If myList.SelectedValue <> "" Then
'i øvrigt er det godt at checke på SelectedIndex (som er -1 hvis intet er sat), fordi  det er 'uafhængigt af værdierne, så man ikke skal kode om hvis man laver om på værdierne senere
            workRow.Cells(cellIndex).CssClass = "tableAlertOff"
End If


'osv osv


next
Avatar billede karsten_larsen Praktikant
04. oktober 2007 - 19:48 #6
okay - kan godt se princippet, men hvad hvis radiobuttonlist ikke altid findes i første række?

Kan jeg ikke løbe alle celler igennem i stedet for?
Avatar billede karsten_larsen Praktikant
04. oktober 2007 - 19:53 #7
Så må det blive i denne stil

            For Each workRow As TableRow In MyTable.Rows
                For Each workCell As TableCell In workRow.Cells
                    Dim myList As RadioButtonList
                    Dim cellIndex As Integer = 0
                    Dim controlindex As Integer = 0

                    'myList = CType(workRow.Cells(cellIndex).Controls(controlindex), RadioButtonList)
                    ' så fremt du kun har en rbl i cellen, og cellen er den første i rækkem
                    Dim i As Integer = 0
                    For i = 0 To 2
                        myList = CType(workCell.Controls.Item(i), RadioButtonList)
                        If myList.SelectedValue = "" Then
                            'i øvrigt er det godt at checke på SelectedIndex (som er -1 hvis intet er sat), fordi  det er 'uafhængigt af værdierne, så man ikke skal kode om hvis man laver om på værdierne senere
                            workRow.Cells(cellIndex).CssClass = "tableAlertOn"
                        Else
                            workRow.Cells(cellIndex).CssClass = "tableAlertOff"
                        End If
                    Next
                Next
            Next
Avatar billede neoman Novice
04. oktober 2007 - 19:57 #8
række eller søjle ? du må fortælle mig lidt mere så... og du kan checke om en celle har controls

if workRow.Cells(celleX).HasControls then whatever ' hvis vi nu antage at celler enten har en rbl eller intet. Hvis du har en rbl i cellen, så ved du om der er andre kontroller der også, og .Controls(controlIndex) finder så den control som har index bal bla:)

alternativt, så kan du bruge den sædvanlige
myList=workRow.Cells(cellIndex).FindControl("navnPåDyret")
if not isNothing(myList) then blabla


og jo - du kan løbe igennem celler

for each workCell as TableCell in workRow.Cells
' og her finder du controllen i cellen eller ej
next
Avatar billede karsten_larsen Praktikant
04. oktober 2007 - 20:00 #9
neoman - lav et svar det lykkedes med følgende:

            For Each workRow As TableRow In MyTable.Rows
                For Each workCell As TableCell In workRow.Cells
                    Dim myList As RadioButtonList
                    Dim cellIndex As Integer = 0
                    Dim controlindex As Integer = 0


                    Dim i As Integer = 0
                    For i = 0 To 2
                        myList = CType(workRow.Cells(i).Controls(0), RadioButtonList)
                        If myList.SelectedValue = "" Then
                            'i øvrigt er det godt at checke på SelectedIndex (som er -1 hvis intet er sat), fordi  det er 'uafhængigt af værdierne, så man ikke skal kode om hvis man laver om på værdierne senere
                            workRow.Cells(i).CssClass = "tableAlertOn"
                        Else
                            workRow.Cells(i).CssClass = "tableAlertOff"
                        End If
                    Next
                Next
            Next


mange tak for hjælpen,
:-) karsten_larsen
Avatar billede neoman Novice
04. oktober 2007 - 20:03 #10
Hmm det er da ikke verdens smukkeste kode, for at sige det mildt:)

Selv tak:)
Avatar billede neoman Novice
04. oktober 2007 - 20:05 #11
(kan ikke se hvoffor du looper over cellerne to loops, når du ikke bruger den ydre men pyt)
Avatar billede karsten_larsen Praktikant
04. oktober 2007 - 20:57 #12
hmm - hvordan vil du lave det mere smukt?

Tabel er 98 rækker med 3 celler i hver med en radiobuttonlist i hver.
Avatar billede neoman Novice
04. oktober 2007 - 21:02 #13
For Each workRow As TableRow In MyTable.Rows
                Dim cellIndex as Integer =-1
                For Each workCell As TableCell In workRow.Cells
                    cellIndex =+1

                    if cellIndex<3 Then
                        Dim myList As RadioButtonList

                        myList = CType(workRow.Cells(cellIndex).Controls(0), RadioButtonList)
                        If myList.SelectedIndex = -1 Then
                            workRow.Cells(cellIndex).CssClass = "tableAlertOn"
                        Else
                            workRow.Cells(cellIndex).CssClass = "tableAlertOff"
                        End If
                    end if
                    Next
                Next
            Next

da du lige nu spæner rundt over alle rækkens celler og for hver af dem så looper du, oveni, over cellerne 0,1,2, så hver værdi bliver sat lige så mange gange som der er celler i rækken.
Avatar billede neoman Novice
04. oktober 2007 - 21:04 #14
Jeg mp ha sovet hehe. Sådan :
         
            For Each workRow As TableRow In MyTable.Rows
                Dim cellIndex as Integer =-1
                For Each workCell As TableCell In workRow.Cells
                    cellIndex =+1

                    if cellIndex<3 Then
                        Dim myList As RadioButtonList

                        myList = CType(workCell.Controls(0), RadioButtonList)
                        If myList.SelectedIndex = -1 Then
                            workCell.CssClass = "tableAlertOn"
                        Else
                            workCell.CssClass = "tableAlertOff"
                        End If
                    end if
                    Next
                Next
            Next
Avatar billede neoman Novice
04. oktober 2007 - 21:11 #15
og hvis du har en rbl i alle cellerne så kan du jo smide cellindex tingesten ud
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