电竞比分网-中国电竞赛事及体育赛事平台

分享

使用ObjectDataSource 控件自定義自己的分頁(yè)(vs2008新控件Listvi...

 ylzrx 2012-02-10

在看貼子http://msdn.microsoft.com/zh-cn/magazine/cc337898.aspx 時(shí),里邊有一段話(huà),如下:

 

請(qǐng)注意:因?yàn)?DataPager 完全依賴(lài) ListView 執(zhí)行實(shí)際的數(shù)據(jù)分頁(yè),而 ListView 又依賴(lài) DataSource 控件,所以對(duì)于其它數(shù)據(jù)綁定控件也存在相同的分頁(yè)限制。例如,對(duì)于 SqlDataSource 控件,僅當(dāng)其設(shè)置為 DataSet 模式時(shí)分頁(yè)才能正常工作,這意味著需要將整個(gè)結(jié)果集加載到內(nèi)存中才能執(zhí)行分頁(yè)。當(dāng)然,您可以使用自定義 DataSource 控件或使用 ObjectDataSource 控件自定義自己的分頁(yè)。


就來(lái)試一下做一小例子.

1. objectdatasource前端代碼如下:

 

                <asp:ListView ID="ListView1" runat="server" DataSourceID="ObjectDataSource1">
                    <ItemTemplate>
                        <tr valign="middle" style="height: 20px;">
                            <td>
                                <div class="divNewsListInNewsPage  aNewsOdcSolutions">
                                    <a href='/news/newsview/apjnews/<%# Eval("ID") %>'>
                                        <div><%# Eval("Title")%></div>
                                    </a>
                                </div>
                            </td>
                            <td style="width: 150px; COLOR: #006096">
                                <div style="float: right;" mce_style="float: right;"> <%# Eval("PublishDate") %></div>
                            </td>
                        </tr>
                    </ItemTemplate>
                   
                    <LayoutTemplate>
                        <table runat="server" style="width: 100%">
                            <tr runat="server" style="height: 350px;" valign="top">
                                <td runat="server">
                                    <table ID="itemPlaceholderContainer" runat="server" border="0" style="width: 100%">
                                        <tr ID="itemPlaceholder" runat="server">
                                        </tr>
                                    </table>
                                </td>
                            </tr>
                            <tr runat="server">
                                <td runat="server" style="text-align: right" mce_style="text-align: right">
                                    <asp:DataPager ID="DataPager1" runat="server" PageSize='<%$AppSettings:NewsPageSize%>'>
                                        <Fields>
                                            <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True"
                                                ShowLastPageButton="True" />
                                        </Fields>
                                    </asp:DataPager>
                                </td>
                            </tr>
                        </table>
                    </LayoutTemplate>
                   
                    <EmptyDataTemplate>
                        <table id="Table1" runat="server" style="">
                            <tr>
                                <td>
                                    未返回?cái)?shù)據(jù)。</td>
                            </tr>
                        </table>
                    </EmptyDataTemplate>
                </asp:ListView>
               
                    <%--MaximumRowsParameterName="maximumRows"--默認(rèn)值, 其實(shí)就是pageSize--%>
                    <%--StartRowIndexParameterName="startRowIndex"--默認(rèn)值--%>
                    <%--EnablePaging以前datagrid有個(gè)allowpaging的--%>
                <asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
                    EnablePaging="true"
                    OldValuesParameterFormatString="original_{0}"
                    SelectMethod="SelectAllDataForNewsPageing"
                    SelectCountMethod="SelectCountForContentAllInfo"
                    TypeName="Namespace.Content">
                </asp:ObjectDataSource>

 

SelectMethod是指向的查數(shù)據(jù)方法名字;

SelectCountMethod是指向查找所有數(shù)據(jù)總行數(shù)的方法;

TypeName是上邊兩個(gè)方法所在的類(lèi)的full type name.

 

selectParameters可以在前端指定或后端代碼指定, 如下:

            this.ObjectDataSource1.SelectParameters.Clear();
            this.ObjectDataSource1.SelectParameters.Add(new Parameter("url", DbType.String, "aaa.aspx"));
            this.ObjectDataSource1.SelectParameters.Add(new Parameter("langCode", DbType.String, bp.FrontLanguage));
            this.ObjectDataSource1.SelectParameters.Add(new Parameter("codedefault", DbType.String, codedefault));
            this.ObjectDataSource1.SelectParameters.Add(new Parameter("maximumRows", DbType.Int32, ConfigurationManager.AppSettings["NewsPageSize"]));
            this.ObjectDataSource1.SelectParameters.Add(new Parameter("startRowIndex", DbType.Int32, "1"));

 

2. SelectMethod和SelectCountMethod的指向的方法代碼如下(注意方法的參數(shù)和上面的selectParameters)

 

        public int SelectCountForContentAllInfo(string url, string langCode, string codedefault, int maximumRows, int startRowIndex)
        {
            string filterString = " CT_URL='" + url + "' and LangCode='" + langCode + "' ";
            int returnValue = base.SelectCount<ContentAllInfo>(filterString); //base.SelectCount返回?cái)?shù)據(jù)所有行數(shù)
            return returnValue;
        }

 

        public List<ContentAllInfo> SelectAllDataForNewsPageing(string url, string langCode, string codedefault, int maximumRows, int startRowIndex)
        {
            List<ContentAllInfo> list = new List<ContentAllInfo>();
            string filterString = " CT_URL='" + url + "' and LangCode='" + langCode + "' ";
            list = base.SelectData<ContentAllInfo>(maximumRows, startRowIndex + 1, " PublishDate desc ", filterString); //.OrderByDescending(ca => ca.PublishDate).ToList();

            //base.SelectData是根據(jù)條件, 每頁(yè)顯示行數(shù)參數(shù)值maximumRows(以前叫pagesize), 從那一行開(kāi)始startRowIndex
            if (list.Count == 0 && langCode.ToLower() != codedefault.ToLower())
            {
                filterString = " CT_URL='" + url + "' and LangCode='" + codedefault + "' ";
                list = base.SelectData<ContentAllInfo>(maximumRows, startRowIndex + 1, " PublishDate desc ", filterString);
            }

            return list;
        }

 

3. 根據(jù)PageSize和startRowIndex查分頁(yè)數(shù)據(jù)的存儲(chǔ)過(guò)程跟一般一樣.

 ALTER PROCEDURE [dbo].[存儲(chǔ)過(guò)程名字]
  @TableName nvarchar(128),
  @MaxRows int,
  @StartRow int,
  @SortExpression nvarchar(200),
  @FilterString nvarchar(2000)
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;

    -- Insert statements for procedure here
--  Only for Debug
-- SET @TableName = 'tblPurchaseOrder'
-- SET @MaxRows = 10
-- SET @StartRow = 1
-- SET @SortExpression = 'OrderDate'

 DECLARE @Filter NVARCHAR(2100);
 DECLARE @SqlString NVARCHAR(4000);
 DECLARE @ParmDefinition NVARCHAR(500);

 DECLARE @EndRow int


 SET @EndRow = @MaxRows - 1 + @StartRow

 IF @FilterString is null or @FilterString = ''
  BEGIN
   SET @Filter = ''
  END
  ELSE
  BEGIN 
   SET @Filter = ' WHERE ('+ @FilterString +') '
  END

 /* Specify the parameter format one time. */
 SET @ParmDefinition = http://www.woyoushebao.com/mailto:N'@StartRowNum int, @EndRowNum int';

  SET @SqlString = N'
   WITH TempTable AS
   (
    SELECT  *, ROW_NUMBER() OVER (ORDER BY ' + @SortExpression + ') AS RowNum
    FROM  [' + @TableName + '] ' + @Filter + '
   )
   SELECT  *  FROM  TempTable
   WHERE RowNum BETWEEN @StartRowNum AND @EndRowNum
   ORDER BY ' + @SortExpression
 PRINT @SqlString

  EXECUTE sp_executesql @SqlString
   , @ParmDefinition
   , @StartRowNum = @StartRow
   , @EndRowNum = @EndRow;
END

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多