我有一篇非常大的文章(单个数据库行),我需要逐页显示。
如果它是一个数据集(多行),那么我可以在具有服务器端分页的网格上显示。
对于单个大行,如何逐页对其进行分段?
用户提交非常大的文章时的典型情况。
答案 0 :(得分:0)
您是否可以拆分文章中关于分段符的文本内容并从中创建List<string>
,然后将其绑定到您的分页和网格控件。然后当页面被回发时,文章将以相同的方式分成块,并且分页将起作用。
当然,您可以在请求之间缓存List<string>
以保存必须转到数据库并重复处理记录。
答案 1 :(得分:0)
怎么样:
string[]
.Split
一些平均线条.DataSource
分配给表格然后享受GridView
提供的分页。
Here is how您可以 LINQ进入 string[]
,并将结果与网格绑定。
答案 2 :(得分:0)
没有通用的解决方案。一种方法是将其存储在已经按页面划分的数据库中。但我认为在从数据库中读取文章时将文章拆分为更好。例如:
var article = new ArticleRepository().GetById(1); //and here article has Pages property that splits original article whatever You like datagrig.datasource = article.Pages;
当您决定以不同方式拆分文章时,可以更改文章和页面属性中的逻辑。它不会影响ASP.NET页面。也许以后你决定该页面应该有关于之前的内容或下一页的内容的信息。然后Page可以有两个属性:PreviousPageExcerpt,NextPageExcerpt。它比将文章转换为字符串数组要好。拥有Article类中的所有逻辑也让你的单元测试将文章划分为页面。
答案 3 :(得分:0)
也许有点像这样的事情 (我没试过它。)
Public Function SplitBySize(ByVal strInput As String, ByVal iSize As Integer) As String() Dim strA() As String Dim iLength As Integer = strInput.Length() Dim iWords As Integer = iLength / iSize + IIf((iLength Mod iSize 0), 1, 0) ReDim strA(iWords) Dim j As Integer = 0, i As Integer For i = 0 To iLength Step iSize strA(j) = Mid(strInput, i + 1, iSize) j = j + 1 Next i Return strA End Function Sub Page_Load() Dim id As Integer = 5 Dim page As Integer = 2 Dim chrsCountPerPage As Integer = 1000 Dim topic As String = "" '(From s In topics Where s.id = id Select s).first().details Dim STopic = SplitBySize(topic, chrsCountPerPage) If page > STopic.Length Then page = 1 End If lblTopic.text = STopic(page - 1) End Sub