#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