Monday, March 26, 2012

Suggestions for "For ... Next"

Hi,

I never used the For...Next Statement.

Can someone give me some suggestions how i can use it with this code to simplify it

Thanks in advance
------------------

If TotalPagesInteger < 8 Then
If TotalPagesInteger = 1 Then
LinkPage_1.Visible = True
LinkPage_1.Text = "1"
ElseIf TotalPagesInteger = 2 Then
LinkPage_1.Visible = True
LinkPage_2.Visible = True
LinkPage_1.Text = "1"
LinkPage_2.Text = "2"
ElseIf TotalPagesInteger = 3 Then
LinkPage_1.Visible = True
LinkPage_2.Visible = True
LinkPage_3.Visible = True
LinkPage_1.Text = "1"
LinkPage_2.Text = "2"
LinkPage_3.Text = "3"
ElseIf TotalPagesInteger = 4 Then
LinkPage_1.Visible = True
LinkPage_2.Visible = True
LinkPage_3.Visible = True
LinkPage_4.Visible = True
LinkPage_1.Text = "1"
LinkPage_2.Text = "2"
LinkPage_3.Text = "3"
LinkPage_4.Text = "4"
ElseIf TotalPagesInteger = 5 Then
LinkPage_1.Visible = True
LinkPage_2.Visible = True
LinkPage_3.Visible = True
LinkPage_4.Visible = True
LinkPage_5.Visible = True
LinkPage_1.Text = "1"
LinkPage_2.Text = "2"
LinkPage_3.Text = "3"
LinkPage_4.Text = "4"
LinkPage_5.Text = "5"
ElseIf TotalPagesInteger = 6 Then
LinkPage_1.Visible = True
LinkPage_2.Visible = True
LinkPage_3.Visible = True
LinkPage_4.Visible = True
LinkPage_5.Visible = True
LinkPage_6.Visible = True
LinkPage_1.Text = "1"
LinkPage_2.Text = "2"
LinkPage_3.Text = "3"
LinkPage_4.Text = "4"
LinkPage_5.Text = "5"
LinkPage_6.Text = "6"
ElseIf TotalPagesInteger = 7 Then
LinkPage_1.Visible = True
LinkPage_2.Visible = True
LinkPage_3.Visible = True
LinkPage_4.Visible = True
LinkPage_5.Visible = True
LinkPage_6.Visible = True
LinkPage_7.Visible = True
LinkPage_1.Text = "1"
LinkPage_2.Text = "2"
LinkPage_3.Text = "3"
LinkPage_4.Text = "4"
LinkPage_5.Text = "5"
LinkPage_6.Text = "6"
LinkPage_7.Text = "7"
End If
End If

Hi, I think I'd use a Select Case statement for this. Something like:

Select Case TotalPagesInteger
Case 1
LinkPage_1.Visible =True
LinkPage_1.Text ="1"
Case 2
LinkPage_1.Visible =True
LinkPage_2.Visible =True
LinkPage_1.Text ="1"
LinkPage_2.Text ="2"
Case 3
LinkPage_1.Visible =True
LinkPage_2.Visible =True
LinkPage_3.Visible =True
LinkPage_1.Text ="1"
LinkPage_2.Text ="2"
LinkPage_3.Text ="3"
Case 4
... more code
End Select


Hello my friend,

Use the following: -

If TotalPagesInteger < 8 Then
For i As Integer = 1 To 7
If i <= TotalPagesInteger Then
Dim lnk As HyperLink = DirectCast(Me.FindControl("LinkPage_" & i), HyperLink)
lnk.Visible = True
lnk.Text = i
End If
Next
End If


I assumed that LinkPage_1, LinkPage_2, etc are hyperlinks. If not, just change HyperLink in the code to whatever the controls are.


Kind regards

Scotty


Humm,

I tried it and it gives me this error :

Object reference not set to an instance of an object.

Description:An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details:System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:

Line 231: If i <= TotalPagesInteger ThenLine 232: Dim lnk As HyperLink = DirectCast(Me.FindControl("LinkPage_" & i), HyperLink)Line 233: lnk.Visible = TrueLine 234: lnk.Text = iLine 235: End If


Hi,

This error message tells you, it could not find control of LinkPage_1(or LinkPage_2, LinkPage_3 etc.) in the page, you should check whether there are the LinkPages' id in the page.


Im sure that is theDirectCast that is wrong.

Can somebody help?


This should help you out. I think that this is what you are looking for.

Dim outIdx as Integer

If TotalPagesInteger < 8 Then
For outIdx = 1 to TotalPagesInteger
Dim hlink As HyperLink = DirectCast(Me.FindControl("LinkPage_" & outIdx), HyperLink)
hlink.Visible = True
hlink.Text = inIdx.ToString
Next
End If

Basically you are wanting to go from 1 to the TotalPagesInteger and make all the previous links visible and the text to be the number of the page.

Ben Miller


Nope

Didn't work too!

I got the same error and LinkPage_1 to LinkPage_7 exists in my code...

Any idea?


I am totally sorry. I got sidetracked using the FindControl. This only works if they are rendered on the page, so I went back to look at your coding and I now understand what you want.

You could so something like this then to take advantage of the For loop.

Dim aryList as ArrayList = new ArrayList()

aryList.Add(LinkPage_1)
aryList.Add(LinkPage_2)
aryList.Add(LinkPage_3)
aryList.Add(LinkPage_4)
aryList.Add(LinkPage_5)
aryList.Add(LinkPage_6)
aryList.Add(LinkPage_7)

Dim outIdx as Integer

If TotalPagesInteger < 8 Then
For outIdx = 1 to TotalPagesInteger
Dim hlink As HyperLink = DirectCast(aryList[outIdx-1], HyperLink)
hlink.Visible = True
hlink.Text = inIdx.ToString
Next
End If

That should do it. Sorry for the delay.

Ben Miller


Hi,

Thanks!!!

Here is the working code :
------------
Dim aryList As ArrayList = New ArrayList()
aryList.Add(LinkPage_1)
aryList.Add(LinkPage_2)
aryList.Add(LinkPage_3)
aryList.Add(LinkPage_4)
aryList.Add(LinkPage_5)
aryList.Add(LinkPage_6)
aryList.Add(LinkPage_7)

Dim outIdx As Integer
Dim hlink As HyperLink

If TotalPagesInteger < 8 Then
For outIdx = 1 To TotalPagesInteger
hlink = DirectCast(aryList(outIdx - 1), HyperLink)
hlink.Visible = True
hlink.Text = outIdx.ToString
Next
End If

0 comments:

Post a Comment