【发布时间】:2011-07-02 10:13:21
【问题描述】:
我有一篇非常大的文章(单个数据库行),我需要逐页显示。
如果它是一个数据集(多行),那么我可以在带有服务器端分页的网格上显示。
对于单个大行,如何逐页分片?
用户提交非常大的文章时的典型情况。
【问题讨论】:
我有一篇非常大的文章(单个数据库行),我需要逐页显示。
如果它是一个数据集(多行),那么我可以在带有服务器端分页的网格上显示。
对于单个大行,如何逐页分片?
用户提交非常大的文章时的典型情况。
【问题讨论】:
您能否将文章的文本内容拆分为分段符并从中创建一个List<string>,然后将其绑定到您的分页和网格控件。然后当页面回传时,文章会以同样的方式被拆分成块,分页就可以工作了。
您当然可以在请求之间缓存List<string>,从而不必重复访问数据库并处理记录。
【讨论】:
怎么样:
string[] .Spliting 在一些平均行数上.DataSource 分配给表然后享受GridView提供的分页。
Here is how你可以LINQ进入string[],并将结果与网格绑定。
【讨论】:
没有通用的解决方案。一种方法是将其存储在已按页面划分的数据库中。但我认为在从数据库中读取文章时将文章拆分为页面会更好。例如:
var article = new ArticleRepository().GetById(1); //这里的文章有Pages属性,可以根据你的喜好拆分原始文章 datagrig.datasource = article.Pages;
当您决定以不同方式拆分文章时,您可以更改文章和页面属性中的逻辑。它不会影响 ASP.NET 页面。也许稍后您决定该页面应该包含有关上一页或下一页内容的信息。那么 Page 可以有两个属性:PreviousPageExcerpt、NextPageExcerpt。这比将文章转换为字符串数组要好。拥有 Article 类中的所有逻辑还可以让您对将文章划分为页面进行单元测试。
【讨论】:
也许是这样的 (我没有测试。)
公共函数 SplitBySize(ByVal strInput As String, ByVal iSize As Integer) As String() 暗淡 strA() 作为字符串 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 接下来我 返回 strA 结束功能 子页面加载() Dim id As Integer = 5 将页面变暗为整数 = 2 将 chrsCountPerPage 调暗为整数 = 1000 Dim topic As String = "" '(From s In topics Where s.id = id Select s).first().details 暗淡 STopic = SplitBySize(topic, chrsCountPerPage) 如果页面 > STopic.Length 然后 页 = 1 万一 lblTopic.text = STopic(page - 1) 结束子【讨论】: