Как добавить div после каждых 5 строк данных?

#asp.net #vb.net

#asp.net #vb.net

Вопрос:

Я пытаюсь добавить div после группы из 5 строк данных внутри Listview.

Я придумал использовать Mod 5 = 0, но я понял, что последняя строка отсутствует, если общее количество строк не может быть разделено на 5.

Например, у меня есть 11 строк данных. «Div» будет добавлен после 5 и 10.

Мне также нужно добавить «Div» после 11. (div будет отображать подробную информацию о каждой группе)

Итак, что-то вроде этого

1|2|3|4|5

DIV1

6|7|8|9|10

DIV2

11|

Div3 (отсутствует)

Вот встроенный код, который у меня есть до сих пор

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

Как мне добавить последний div, если общее количество # нельзя разделить на 5?

Я должен как-то получить общее количество отображаемых индексов…

Ответ №1:

Вы можете сравнить его с ListView.Товары.Свойство Count.

Это должно сработать:

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

Если вы используете подкачку, вы должны использовать DataItemIndex вместо DisplayIndex.

Редактировать: (согласно вашему последнему комментарию)

Если вам нужно показать общее количество записей, вы должны привести источник данных ListView к его правильному типу (например, DataTable).

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

или в одной строке:

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

Но это работает только при привязке данных, а не при каждой обратной передаче, потому что источник данных будет удален в конце жизненного цикла страницы.

Комментарии:

1. вау, stackoverflow — лучший сайт, который я когда-либо использовал … супер быстрые ответы… В любом случае я в конечном итоге использовал контейнер. DisplayIndex 1 = ListView1. Товары. Посчитайте, и это сработало!! Однако возникла другая проблема. Что, если у меня 31 строка данных? на странице отображается только 20 данных, поэтому отображаемый индекс и общие данные не будут совпадать на 2-й странице… в любом случае ваш ответ был супер! Я только что получил еще одну проблему, которую я не ожидал.

2. @shinya: извините за поздний ответ, я спал 😉 Отредактировал мой ответ в соответствии с вашим комментарием.

3. Мне пришлось снова вернуться к этой проблеме. Итак, я использовал DataItemIndex, но мне также нужно как-то узнать общее количество строк. ListView1. Товары. Количество — это всегда размер страницы (в моем случае 20). Как мне ссылаться на TotalRowCount, используя встроенный код?

Ответ №2:

» 6″ делает вид, что вы догадываетесь, как работает функция по модулю 🙂

попробуйте это:

<%# 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>", "")%>

итак, сначала (индекс 6)% 5 == 0 совпадает с индексом%5 == 4,

второй этаж ((индекс 6) / 5) приводит к 2, когда индекс = 4, это не то, что вы хотите. использование 1 floor(index / 5) даст вам правильные результаты — вы даже можете отбросить «1 «, если хотите, чтобы индекс начинался с 0.

(ps. я не знаю asp.net , извините, если есть ошибки компилятора)

Комментарии:

1. Равно ли 4% 5 = 4?? 4, разделенное на остаток 5, не равно 4. не так ли? Да, это первый раз, когда используется модуль. 🙂

2. да, это так 🙂 когда вы думаете о модуле, просто подумайте о вычислении с секундами в минуту. например, 61` = 1, но также 1` = 1, и, конечно, также 121` = 1.

3. p.s. вы можете поиграть с этим еще немного в wolfram alpha: wolframalpha.com/input/?i=(0…20) mod 5