Как сделать подкачку данных одной строки в ASP.NET
У меня есть очень большая статья (одна строка базы данных), и мне нужно показывать страницу за страницей.
Если бы это был набор данных (несколько строк), то я мог бы показать его на сетке с подкачкой на стороне сервера.
Для одной большой строки, как фрагментировать ее постранично?
Типичный случай, когда пользователь отправляет очень большую статью.
4 ответа
Может быть, что-то подобное (я не проверял это.)
Открытая функция SplitBySize(ByVal strInput как строка, ByVal iSize как целое число) как строка () Dim strA () как строка Dim iLength как целое число = strInput.Length() Dim iWords как целое число = iLength / iSize + IIf((iLength Mod iSize 0)), 1, 0) ReDim strA(iWords) Dim j As Integer = 0, i As Integer For i = 0 Шаг iSize Шаг iSize strA(j) = Mid(strInput, i + 1, iSize) j = j + 1 Далее i Возвращает strA Функция завершения Sub Page_Load() Dim id As Integer = 5 Dim page As Integer = 2 Dim chrsCountPerPage As Integer = 1000 Dim topic As String = "" '(Из s В темах, где s.id = id Выберите s).first().details Dim STopic = SplitBySize(topic, chrsCountPerPage) If page > STopic.Length Then page = 1 End If lblTopic.text = STopic(page - 1) End Sub
Можете ли вы разделить текст статьи на разрывы абзацев и сделать List<string>
из них, затем свяжите это со своими элементами управления Paging и Grid. Затем, когда страница будет отправлена обратно, статья будет разделена на куски таким же образом, и подкачка будет работать.
Вы могли бы, конечно, кешировать List<string>
между запросами на сохранение приходится заходить в базу данных и многократно обрабатывать записи.
Там нет общего решения. Одним из способов было бы сохранить его в базе данных, уже разделенной на страницы. Но я думаю, что было бы лучше разделить статью на страницы во время чтения из базы данных. Например:
var article = new ArticleRepository (). GetById (1); // и здесь статья имеет свойство Pages, которое разделяет оригинальную статью на что угодно datagrig.datasource = article.Pages;
Вы можете изменить логику в статье и свойстве Pages, если решите разделить статьи по-разному. И это не повлияет на страницу ASP.NET. Возможно, позже Вы решите, что на этой странице должна быть информация о том, что было на предыдущей или что на следующей странице. Тогда Page может иметь два свойства: PreviousPageExcerpt, NextPageExcerpt. Это лучше, чем конвертировать статью в массив строк. Имея всю логику в классе Article, вы также сможете тестировать модули, разделяя статьи на страницы.
Как насчет:
- Вытащить данные в
string[]
от.Split
на некотором среднем размере линий - Добавить каждый элемент в DataRow
- Назначьте
.DataSource
к столу
А затем наслаждайтесь пейджингом, предоставляемым GridView
,
Вот как вы можете LINQ в string[]
и связать результат с сеткой.