Показать данные в коллекции по индексу страницы на одной странице [правильные способы]
Как правильно отображать данные путем индексации от страницы к странице (Я имею в виду чтение следующего предыдущего на одной странице)?
В настоящее время, скажем, у меня есть данные о рекламных акциях. Я храню все данные о рекламных акциях в arraylist, скажем, 21 данные о рекламных акциях. Код находится в разделе "Что я пробовал".
Последовательность такова:-
1. Посчитайте, сколько индексируют страницы будут из этого общего сведения
2. назначьте всем изображениям из индекса 0 максимальное количество отображений на каждой странице индекса.
3. кнопка Далее продолжит показывать из следующего индекса максимальное количество последних страниц.
4. Предыдущая кнопка покажет номер из первого непрерывного номера предыдущей индексной страницы
Мне нужно знать, есть ли лучшие способы, чем этот? В настоящее время этот метод работает, но занимает слишком много строк кодов.
Любой фрагмент кода C# или трюки будут приняты, даже если я написал на VB, так как большая часть кода в моей программе переведена с C# для какой-то функции.
Что я уже пробовал:
"Private Sub PageCount() If arr_promotions.Count <= 3 Then lngTotPage = 1 ElseIf arr_promotions.Count > 3 And arr_promotions.Count <= 6 Then lngTotPage = 2 ElseIf arr_promotions.Count > 6 And arr_promotions.Count <= 9 Then lngTotPage = 3 ElseIf arr_promotions.Count > 9 And arr_promotions.Count <= 12 Then lngTotPage = 4 ElseIf arr_promotions.Count > 12 And arr_promotions.Count <= 15 Then lngTotPage = 5 ElseIf arr_promotions.Count > 15 And arr_promotions.Count <= 18 Then lngTotPage = 6 ElseIf arr_promotions.Count > 18 And arr_promotions.Count <= 21 Then lngTotPage = 7 ElseIf arr_promotions.Count > 21 And arr_promotions.Count <= 24 Then lngTotPage = 8 ElseIf arr_promotions.Count > 24 And arr_promotions.Count <= 27 Then lngTotPage = 9 ElseIf arr_promotions.Count > 27 And arr_promotions.Count <= 30 Then lngTotPage = 10 ElseIf arr_promotions.Count > 30 And arr_promotions.Count <= 33 Then lngTotPage = 11 ElseIf arr_promotions.Count > 33 And arr_promotions.Count <= 36 Then lngTotPage = 12 ElseIf arr_promotions.Count > 36 And arr_promotions.Count <= 39 Then lngTotPage = 13 ElseIf arr_promotions.Count > 39 And arr_promotions.Count <= 42 Then lngTotPage = 14 ElseIf arr_promotions.Count > 42 And arr_promotions.Count <= 45 Then lngTotPage = 15 ElseIf arr_promotions.Count > 45 And arr_promotions.Count <= 48 Then lngTotPage = 16 ElseIf arr_promotions.Count > 48 And arr_promotions.Count <= 51 Then lngTotPage = 17 ElseIf arr_promotions.Count > 51 And arr_promotions.Count <= 54 Then lngTotPage = 18 ElseIf arr_promotions.Count > 54 And arr_promotions.Count <= 57 Then lngTotPage = 19 ElseIf arr_promotions.Count > 57 And arr_promotions.Count <= 60 Then lngTotPage = 20 End If End Sub
// MAX PROMO - 3, ЧТО ОЗНАЧАЕТ 3 ИЗОБРАЖЕНИЯ НА КАЖДОЙ СТРАНИЦЕ
Private Sub UpdatePromotionsInfo() Dim i As Integer = 0 Dim intInfoCnt As Integer = 0 Dim tmpIdx As Integer = 0 Dim x As Integer = 0 Try intInfoCnt = arr_promotions.Count HideAllBox() If intInfoCnt <= (intMaxPromo + 1) Then For i = 0 To intInfoCnt - 1 x = i + 1 Select Case x Case 1 FillContent(i, id_1, img1) Case 2 FillContent(i, id_2, img2) Case 3 FillContent(i, id_3, img3) End Select tmpIdx = tmpIdx + 1 Next intStartPageIdx = 0 intLastPageIdx = intMaxPromo intCurrntPageIdx = intLastPageIdx navi_next.Visibility = Visibility.Collapsed navi_previous.Visibility = Visibility.Collapsed Else tmpIdx = 1 For i = 0 To intMaxPromo Select Case tmpIdx Case 1 FillContent(i, id_1, img1) Case 2 FillContent(i, id_2, img2) Case 3 FillContent(i, id_3, img3) End Select tmpIdx = tmpIdx + 1 Next intStartPageIdx = 0 intLastPageIdx = intMaxPromo intCurrntPageIdx = intLastPageIdx navi_next.Visibility = Visibility.Visible navi_previous.Visibility = Visibility.Collapsed End If tb_page.Text = lngCurrPage.ToString & " / " & lngTotPage.ToString Catch ex As Exception strMsg = "[" & strlogpage & "] Error in UpdateDirInfo." & ex.Message App.LogEvents(strMsg, EventLogEntryType.Error) End Try End Sub
Private Sub FillContent(ByVal i As Integer, ByVal tbid As TextBlock, ByVal my_img As Image) Try tbid.Text = arr_promotions.Item(i).ID my_img.Source = obj_core.ReturnSpecificImage(arr_promotions.Item(i).strimgpath, 350) my_img.Visibility = Visibility.Visible Catch ex As Exception strMsg = "[" & strlogpage & "] Error at fill content to view. Ex:" & ex.Message App.LogEvents(strMsg, EventLogEntryType.Error) EnableTouch() ScreenTimer.Start() End Try End Sub
Private Sub navi_next_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles navi_next.Click Dim i As Integer Dim intTmpVal As Integer = 1 Try DisableTouch() ScreenTimer.Stop() intStartPageIdx = intStartPageIdx + (intMaxPromo + 1) intLastPageIdx = intStartPageIdx + (intMaxPromo + 1) navi_next.Visibility = Visibility.Collapsed navi_previous.Visibility = Visibility.Collapsed lngCurrPage = lngCurrPage + 1 PageCount() tb_page.Text = lngCurrPage.ToString & " / " & lngTotPage.ToString HideAllBox() If intLastPageIdx >= arr_promotions.Count Then intCurrntPageIdx = intLastPageIdx - arr_promotions.Count intLastPageIdx = intLastPageIdx - intCurrntPageIdx For i = intStartPageIdx To (intLastPageIdx - 1) Select Case intTmpVal Case 1 FillContent(i, id_1, img1) Case 2 FillContent(i, id_2, img2) Case 3 FillContent(i, id_3, img3) End Select intTmpVal = intTmpVal + 1 Next navi_next.Visibility = Visibility.Collapsed navi_previous.Visibility = Visibility.Visible ElseIf intLastPageIdx < arr_promotions.Count Then For i = intStartPageIdx To (intLastPageIdx) Select Case intTmpVal Case 1 FillContent(i, id_1, img1) Case 2 FillContent(i, id_2, img2) Case 3 FillContent(i, id_3, img3) End Select intTmpVal = intTmpVal + 1 Next If intStartPageIdx <> 0 Then navi_next.Visibility = Visibility.Visible navi_previous.Visibility = Visibility.Visible Else navi_next.Visibility = Visibility.Visible End If End If EnableTouch() ScreenTimer.Start() Catch ex As Exception strMsg = "[" & strlogpage & "] Error in next button in promotion page." & ex.Message App.LogEvents(strMsg, EventLogEntryType.Error) EnableTouch() ScreenTimer.Start() End Try End Sub Private Sub navi_previous_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles navi_previous.Click Dim i As Integer Dim intTmpVal As Integer = 1 Try DisableTouch() ScreenTimer.Stop() intStartPageIdx = intStartPageIdx - (intMaxPromo + 1) intLastPageIdx = intStartPageIdx + (intMaxPromo + 1) navi_next.Visibility = Visibility.Collapsed navi_previous.Visibility = Visibility.Collapsed lngCurrPage = lngCurrPage - 1 PageCount() tb_page.Text = lngCurrPage.ToString & " / " & lngTotPage.ToString HideAllBox() If intLastPageIdx >= arr_promotions.Count Then intCurrntPageIdx = intLastPageIdx - arr_promotions.Count intLastPageIdx = intLastPageIdx - intCurrntPageIdx For i = intStartPageIdx To (intLastPageIdx - 1) Select Case intTmpVal Case 1 FillContent(i, id_1, img1) Case 2 FillContent(i, id_2, img2) Case 3 FillContent(i, id_3, img3) End Select intTmpVal = intTmpVal + 1 Next navi_next.Visibility = Visibility.Collapsed navi_previous.Visibility = Visibility.Visible ElseIf intLastPageIdx < arr_promotions.Count Then For i = intStartPageIdx To (intLastPageIdx) Select Case intTmpVal Case 1 FillContent(i, id_1, img1) Case 2 FillContent(i, id_2, img2) Case 3 FillContent(i, id_3, img3) End Select intTmpVal = intTmpVal + 1 Next If intStartPageIdx <> 0 Then navi_next.Visibility = Visibility.Visible navi_previous.Visibility = Visibility.Visible Else navi_next.Visibility = Visibility.Visible End If End If EnableTouch() ScreenTimer.Start() Catch ex As Exception strMsg = "[" & strlogpage & "] Error in previous button in promotions page." & ex.Message App.LogEvents(strMsg, EventLogEntryType.Error) EnableTouch() ScreenTimer.Start() End Try End Sub
Michael_Davies
Для вашего PageCount просто мод arr_promotions.Посчитайте с 3, чтобы узнать, сколько наборов из 3, например;
lngTotPage = arr_promotions.Count Mod 3
Если lngTotPage * 3 < & gt; arr_promotions.Тогда считай
lngTotPage += 1
За endif
Luiey Ichigo
Если общие данные акции равны 10:
lngTotPage = arr_promotions.Count Mod 3 'Equal to 1 If lngTotPage * 3 <> arr_promotions.Count Then lngTotPage += 1 'Equal to 2 End If
Но в моем длинном коде строк он показывает на 4 страницах, что это будет.
Michael_Davies
Извиняться;
lngTotPage = arr_promotions.Кол-во / 3
Если lngTotPage * 3 < & gt; arr_promotions.Тогда Считай
lngTotPage += 1
Конец, Если
Luiey Ichigo
:)
Это работает! Спасибо. Осталось только показать данные в "UpdatePromotionsInfo" правильным и динамичным способом, потому что у меня есть еще несколько страниц, которые должны показать на них 30 данных. Итак, он сделает мне 30 повторных "дел". Некоторые страницы показывают 16 данных.
Я использую страницы WPF (навигация)
Luiey Ichigo
Привет Майкл,
Похоже, что эти строки кода работают. Нашли с тех пор, как кодовые строки какого-то графа возвращают неправильное число. Пример общее количество arraylist - 10 данных, 15 строк для каждой страницы, общий возврат страницы 1/2. Ниже код возврата 1 страница:-
lngTotPage = CInt(Fix(Math.Ceiling(CDbl(arr_tenantview.Count) / 15)))