如何在ASP.NET中分页单行数据

时间:2011-07-02 10:13:21

标签: c# asp.net paging

我有一篇非常大的文章(单个数据库行),我需要逐页显示。

如果它是一个数据集(多行),那么我可以在具有服务器端分页的网格上显示。

对于单个大行,如何逐页对其进行分段?

用户提交非常大的文章时的典型情况。

4 个答案:

答案 0 :(得分:0)

您是否可以拆分文章中关于分段符的文本内容并从中创建List<string>,然后将其绑定到您的分页和网格控件。然后当页面被回发时,文章将以相同的方式分成块,并且分页将起作用。

当然,您可以在请求之间缓存List<string>以保存必须转到数据库并重复处理记录。

答案 1 :(得分:0)

怎么样:

  • 将数据拖入string[] .Split一些平均线条
  • 将每个项目添加到DataRow
  • .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