Question

I'm trying to add div after a group of 5 rows of data inside Listview.

I came up with using Mod 5 = 0 but I realized the last row is missing if total row count can't divided by 5.

For example, I have 11 rows of data. "Div" will be added after 5 and 10.

I also need to add "Div" after 11 as well. (div will display details of each group)

So, something like this

1|2|3|4|5

DIV1

6|7|8|9|10

DIV2

11|

Div3(missing)

Here is inline code I have so far

 <%# IIf((Container.DisplayIndex + 6) Mod 5 = 0, "<div id='temp" + Math.Floor((Container.DisplayIndex + 6) / 5).ToString + "' style='display:none'></div>", "")%>

How do I add the last div when total # can't be divided by 5?

I have to get the total# of display index somehow...

Was it helpful?

Solution

You can compare it with the ListView.Items.Count property.

This should work:

Dim addDiv = (Container.DisplayIndex Mod 5 = 0) OrElse _
             (Container.DisplayIndex + 1 = ListView1.Items.Count)

If you are using paging you should use DataItemIndex instead of DisplayIndex.

Edit: (according to your last comment)

If you need to show the total record count you have to cast the ListView's DataSource to it's correct type(f.e. a DataTable).

Dim tbl as DataTable = DirectCast(ListView1.DataSource, DataTable)
Dim totalCount as Int32 = tbl.Rows.Count

or in one line:

DirectCast(ListView1.DataSource, DataTable).Rows.Count

But this works only on databinding and not on every postback because the DataSource will be disposed at the end of the Page-Lifecycle.

OTHER TIPS

the "+6" makes it look like you're guessing around how the modulo function works :)

try this:

<%# IIf(Container.DisplayIndex Mod 5 = 4 Or Container.DisplayIndex = ListView.Items.Count , "<div id='temp" + (1+Math.Floor(Container.DisplayIndex/5)).ToString + "' style='display:none'></div>", "")%>

so first (index+6)%5 == 0 is the same as index%5 == 4,

second floor((index+6)/5) results in 2 when index=4, this is not what you want. using 1+floor(index/5) will give you the correct results --- you could even drop the "1+" if you want the index to start from 0.

(p.s. i don't know asp.net, sorry if there's compiler errors)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top