首先请大家看清我的要求,谢谢大家:
1.用aspnetpager分页,前台用repeater2.后台只给了我一个类库让我掉用一个方法,这个方法返回的是一个list,不能动sql语句3.其实问题就是,用aspnetpager,前台repeater,分页,数据源是个list不能动sql语句,所以那些Dataset,Datatable 的都不可以用了4.谢谢大家,

解决方案 »

  1.   

    你用list就list呗有什么关系啊。。绑定时。。你自己遍历这个list绑定上去
      

  2.   

    具体怎么遍历这个list绑定,着就是我问题的关键地方了,我新手可能问挺多比较菜的问题,大家见谅啊,具体怎么个遍历绑定法?
      

  3.   

    http://www.webdiyer.com/Controls/AspNetPager/Downloads里面 Demo都有其实  不管是  泛型    还是 datatable   还是  dataset   
    你分页接收的数据 与它 没什么关系
      

  4.   

    你这个我看过了,没看懂,还有就是sql语句没有分页,sql语句只是一个多表连接查询,然后返回的一个List
    现在其实说白了就是对这个List分页,还有你说没有关系那具体应该怎么实现这个分页?因为我比较着急语言上可能有点急躁,请大家见谅!
      

  5.   

    list也可以直接绑定到repeater如果获取list的方法不支持分页,那么就自己写一个方法过滤list当前页的数据,再绑定到repeater
      

  6.   

    list使用skip take
    list.Skip((AspNetPager1.CurrentPageIndex - 1) * AspNetPager1.
    PageSize).Take(AspNetPager1.PageSize); 
      

  7.   

    以下是模拟分页的Linq方法! 用Linq实现分页,有个实现IEnumerable接口的数组。
    string[] Array = { "Hjiang", "Hwang", "Wange", "Hwan", "Hcheng", "Hhoho" }; 封装分页的方法
    /// <summary> 
    /// 分页  
    /// summary> 
    /// <typeparam name="T">typeparam> 
    /// <param name="List">实现IEnumerableparam> 
    /// <param name="FunWhere">delegate检索条件param> 
    /// <param name="FunOrder">delegate排序param> 
    /// <param name="PageSize">每页显示数param> 
    /// <param name="PageIndex">当前页码param> 
    /// <returns>returns> 
    static IEnumerable<T> GetIenumberable<T>(IEnumerable<T> List,Func<T, 
    bool> FunWhere,Func<T,string> FunOrder, int PageSize, int PageIndex)  
    {  
    var rance = List.Where(FunWhere).OrderByDescending(FunOrder).
    Select(t => t).Skip((PageIndex - 1) * PageSize).Take(PageSize);  
    return rance;  
    } 然后我们对数组进行模拟分页以下读取第一页
    var sArray = GetIenumberable<String>
    (Array, r => r.StartsWith("H"), r => r, 1, 1);  
    foreach (var s in sArray)  
    {  
    Console.WriteLine(s);  
    } 第二页
    var sArray = GetIenumberable<String>
    (Array, r => r.StartsWith("H"), r => r, 1, 2);  
    foreach (var s in sArray)  
    {  
    Console.WriteLine(s);  
    } 以上介绍用Linq实现分页。
      

  8.   

    我知道list也可以绑定到repeater,现在的问题就是在绑定到repeater之前,怎么用aspnetpager来处理这个list
      

  9.   


      这个不错啊      linq中好像就是用这个分页滴
      

  10.   


    你sql  返回的   只需要 pageindex   pagesize    +   你自己的条件就行了   与sql无关的
      

  11.   

    或者用pagedatasource也可以实现分页  不过 使用linq分页比较简单些
      

  12.   

    为什么我这里没有你的这个Skip方法啊?需要引用什么命名空间吗?
      

  13.   

    list 也可以 .skip().take()
    前面一个是从第几条开始取,然后再take 你想要的多少条?
      

  14.   

    SQLServerDAL public DataSet SelLinkAll(int Pagesize, int PageIndex, int LinkType)
            {
                StringBuilder str = new StringBuilder();
                IList<SqlParameter> para = new List<SqlParameter>();
                if (LinkType != 0)
                {
                    str.Append(" and LinkType = @LinkType ");
                    para.Add(new SqlParameter("@LinkType", LinkType));
                }
                string sql1 = "select count(*) from Link where 1=1" + str.ToString();
                string sql2 = " ; select top(" + Pagesize + ") * from Link where LinkId not in (select top " + (PageIndex - 1) * Pagesize + "  LinkId from Link where 1=1 " + str.ToString() + "  order by LinkOrder ) " + str + " order by LinkOrder ";
                SqlParameter[] pa = new SqlParameter[para.Count];
                for (int i = 0; i < pa.Length; i++)
                {
                    pa[i] = para[i];
                }
                return new DBHelp().ExecuteDataSet(sql1 + sql2, pa);
            }
    BLlpublic DataSet SelLinkAll(int Pagesize, int PageIndex, int LinkType)
            {
                return ilink.SelLinkAll(Pagesize, PageIndex, LinkType);
            }
    aspx.csint pagesize = 10;
            Link linkbll = new Link();
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    int PageIndex = 1;
                    Bind();
                }
            }        //数据分页绑定
            private void Bind()
            {
                DataSet ds = linkbll.SelLinkAll(pagesize, PageIndex, int.Parse(linktype.Value.ToString()));
                if (ds != null && ds.Tables.Count > 0)
                {
                    ReplinkList.DataSource = ds.Tables[1];
                    ReplinkList.DataBind();
                    decimal count = decimal.Parse(ds.Tables[0].Rows[0][0].ToString());
                    AspNetPager1.RecordCount = int.Parse(count.ToString());
                    AspNetPager1.PageSize = pagesize;
                    AspNetPager1.CurrentPageIndex = PageIndex;
                }
                else
                {
                    this.ReplinkList.Controls.Clear();
                }        }        protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e)
            {
                PageIndex = e.NewPageIndex;
                Bind();
            }        public int PageIndex
            {
                get
                {
                    if (ViewState["pageindex"] != null)
                    {
                        return int.Parse(ViewState["pageindex"].ToString());
                    }
                    else
                    {
                        return 1;
                    }
                }
                set { ViewState["pageindex"] = value; }
            }        #endregion
      

  15.   

    我对这个.skip().take()比较感兴趣,但是怎么我在list后.没有skip()呢?
      

  16.   

    aspx<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="linklist.aspx.cs" Inherits="cofcms.page.admin.linklist" %><%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %>
    <head runat="server">
        <title>友情链接</title>
        <link href="Images/css1/css.css" rel="stylesheet" type="text/css" />    <script type="text/javascript" src="../../themes/script/jquery-1.4.1-vsdoc.js"></script>    <script type="text/javascript" src="../../themes/script/jquery-1.4.1.min-vsdoc.js"></script></head>
    <body>
        <form id="form1" runat="server">
        <div>
            <table width="99%">
                <tr>
                    <td>
                        <fieldset>
                            <legend>功能面板</legend><a href="javascript:void(0)" onclick="updatelink()">
                                <img src="Images/users.png" style="border: 0px; height: 12px; width: 14px;" />新增链接</a>
                        </fieldset>
                        <table class="table" cellspacing="1" cellpadding="2" width="100%" border="0" id="tab">            
                            <asp:Repeater ID="ReplinkList" runat="server">
                                <ItemTemplate>
                                    <tr>
                                        <td class="td_bg" height="23">
                                            <input type="checkbox" value='<%#Eval("LinkId")%>' runat="server" id="checkLinkid" />
                                        </td>
                                        <td class="td_bg" height="23">
                                            <%#Eval("LinkName")%>
                                        </td>
                                        <td class="td_bg" height="23">
                                            <a href='http://<%#Eval("LinkAddress")%>' target="_blank">点击访问</a>
                                        </td>
                                        <td class="td_bg" height="23">
                                            <%# int.Parse(Eval("LinkType").ToString())==1?"本站链接":"友情链接"%>
                                        </td>
                                        <td class="td_bg" height="23">
                                            <%#Eval("LinkOrder")%>
                                        </td>
                                        <td class="td_bg">
                                            <a href="#" onclick="updatelink('<%#Eval("LinkId")%>','<%#Eval("LinkName")%>','<%#Eval("LinkAddress")%>','<%#Eval("LinkOrder")%>','<%#Eval("LinkType")%>','<%#Eval("LinkImgName")%>')">
                                                修改</a>&nbsp;&nbsp;
                                            <asp:LinkButton ID="DelLink" runat="server" CommandArgument='<%#Eval("LinkId")%>'
                                                Text="删除" CommandName="del" OnCommand="delLink" OnClientClick="return confirm('删除后将不可恢复,是否删除?')"></asp:LinkButton>
                                        </td>
                                    </tr>
                                </ItemTemplate>
                            </asp:Repeater>
                            <tr>
                                <td colspan="6">
                                    <input type="checkbox" id="cball" onclick="selectall(this)" />全选
                                    <asp:Button ID="delAllNews" runat="server" Text="批量删除" OnClick="delAllNews_Click" />
                                </td>
                            </tr>
                        </table>
                        <div style="text-align: center; padding-top: 5px;">
                            <webdiyer:AspNetPager ID="AspNetPager1" runat="server" FirstPageText="首页" LastPageText="尾页"
                                NextPageText="下一页" OnPageChanging="AspNetPager1_PageChanging" PrevPageText="上一页">
                            </webdiyer:AspNetPager>
                        </div>
                    </td>
                </tr>
            </table>
        </div>
        <!--AddLink层-->
        <div style="position: absolute; “ id="openid">
            <div style="float: right; color: white; padding: 3px; cursor: pointer" id="overid"
                onclick="closewin()">
                <img src='Images/remove.png' style='height: 12px; width: 12px; bgcolor: #FFFFFF'
                    alt='关闭' /></div>
            <div style="padding: 7px 0px 5px 7px;">
                <table style="padding: 5px; width: 100%;">
                    <tr>
                        <td style="width: 35px;" align="right">
                            链接名称
                        </td>
                        <td style="width: 65px;">
                            <input type="text" runat="server" id="linkname" name="linkname" /><span id="msgname"></span>
                        </td>
                    </tr>
                    <tr>
                        <td align="right">
                            链接地址
                        </td>
                        <td>
                            <input type="text" runat="server" id="linkaddress" name="linkaddress" /><span id="msgaddress"></span>
                        </td>
                    </tr>
                    <tr>
                        <td align="right">
                            排序
                        </td>
                        <td>
                            <input runat="server" type="text" id="linkorder" name="linkorder" onkeyup="value=value.replace(/[^0-9_]/g,'')" /><span
                                id="msgorder"></span>
                        </td>
                    </tr>
                    <tr>
                        <td align="right">
                            链接类型
                        </td>
                        <td>
                            <select id="linktype" runat="server" onchange="changeitem()">
                                <option value="0">--请选择--</option>
                                <option value="1">本站链接</option>
                                <option value="2">友情链接</option>
                            </select><span id="msgtype"></span><br />
                            <asp:Label ID="imglink" runat="server" Text=""></asp:Label>
                            <asp:HiddenField ID="linkid" runat="server" Value="" />
                        </td>
                    </tr>
                    <tr>
                        <td align="center" colspan="2">
                            <div id="linkfiledown" style="display: none;">
                                <asp:FileUpload ID="getlink" runat="server" />
                            </div>
                        </td>
                    </tr>
                    <tr>
                        <td>
                        </td>
                        <td>
                            <asp:Button ID="GetlinkBtn" runat="server" Text="提 交" OnClientClick="return check();"
                                OnClick="GetlinkBtn_Click" />
                            <input type="button" onclick="return ClearText();" value="清 空" />
                        </td>
                    </tr>
                </table>
            </div>
        </div>
        <!--层结束-->
        </form>
    </body>
    </html><script language="javascript" type="text/javascript">
        //判断连接类型
        function changeitem() {
            var item = $("#linktype").val();
            if (item == "2") {
                $("#linkfiledown").css("display", "block");
            }
            else {
                $("#linkfiledown").css("display", "none");
            }
        }
        //关闭方法
        function closewin() {
            //关闭层和清除文本参数
            $("#openid").hide(300);
            $("#shutid").hide(100);
            $("#linkfiledown").css("display", "none");
        }    var posX;
        var posY;
        var popDiv;
        var dragable;
        //鼠标按下事件
        function down(e, openid) {
            popDiv = document.getElementById(openid);
            popDiv.style.cursor = "move";
            e = e || window.event; //如果是IE  活着  
            posX = e.clientX - parseInt(popDiv.style.left);
            posY = e.clientY - parseInt(popDiv.style.top);
            dragable = true;
            document.onmousemove = move;
        }
        //鼠标移动事件
        function move(ev) {
            if (dragable == true) {
                ev = ev || window.event; //如果是IE   
                popDiv.style.left = (ev.clientX - posX) + "px";
                popDiv.style.top = (ev.clientY - posY) + "px";
            }
        }
        //鼠标抬起事件
        function up() {
            dragable = false;
            popDiv.style.cursor = "default";
        }    //创建模态层
        function HoutDiv() {        //先要移除模态层
            $("#shutid").remove();
            //创建模态层添加属性  
            var div = document.createElement("div");
            div.setAttribute("id", "shutid");
            document.body.appendChild(div);
            $("#shutid").css({ position: "absolute", left: "0px", top: "0px", background: "#CCCCCC" });
            document.getElementById("shutid").style.filter = "Alpha(opacity=60)";
            document.getElementById("shutid").style.opacity = "0.6";
            //添加模态层宽高
            $("#shutid").css("width", $(document).width());
            $("#shutid").css("height", $(document).height());
            //层的级别
            $("#shutid").css("z-index", "1");
        }    //打开浮动层
        function updatelink(linkid, linkname, linkaddress, linkorder, linktype, imglink) {
            debugger;
            $("#openid").show(300);
            //层的级别最高
            $("#openid").css("z-index", "2");
            HoutDiv(); //调用遮罩层        $("#linkname").val(linkname);
            $("#linkaddress").val(linkaddress);
            $("#linkorder").val(linkorder);
            $("#linktype").val(linktype);
            $("#imglink").text(imglink);
            $("#linkid").val(linkid);
        }
    </script>
      

  17.   


      using System.Linq;
      

  18.   

    有点复杂,能不能再页面的后台直接操作的?不动数据层和逻辑层的?我就是想用aspnetpager操作下这个list,然后把list绑定到repeater就OK了,我是这么认为的,不知道是不是有问题,思路是这样的但是具体的操作我不会
      

  19.   

    好像是没有using System.Linq;  这个吧?红线勾着。。
      

  20.   

    using System.Linq;我知道了,貌似这个项目得是3.5,我的项目是2.0,但是这个我不能改成3.5,因为改完了有很多问题,我只是管做 项目的一个小功能,不敢因为这个就改版本
      

  21.   


    那你直接 把 sql  放在 绑定  那里 不就行了 
    这么简单        lz多自学尝试
    不能 让别人帮你 都做完了 
    我们是程序员啊
      

  22.   

      vs2008、 vs2010才有  你不会用的是vs2005/2003/2000吧   
      

  23.   

    后台//数据绑定
        protected void dataBind()
        {
            UserInfo ui = Session["currentUser"] as UserInfo;
            UserInfo u = UserManager.getUserByName(ui.name);
            IList<Info> list = InfoManager.getInfoByUid(u.id);
            PagedDataSource pds = new PagedDataSource();
            pds.DataSource = list;
            pds.CurrentPageIndex = anpFY.CurrentPageIndex - 1;
            pds.PageSize = anpFY.PageSize;
            pds.AllowPaging = true;
            anpFY.RecordCount = list.Count;
            this.RepInfo.DataSource = pds;
            this.RepInfo.DataBind();
        }    //分页控件事件
        protected void anpFY_PageChanged(object sender, EventArgs e)
        {
            dataBind();
        }
    前台 <asp:Repeater ID="RepInfo" runat="server" OnItemCommand="RepInfo_ItemCommand" OnItemDataBound="RepInfo_ItemDataBound">
                    <HeaderTemplate>
                        <table width="100%" border="1" cellspacing="0" cellpadding="4" style="border-collapse: collapse">
                            <tr style="background-color: #ccccff; height: 35px;">
                                <th style="width: 5%">
                                    序号
                                </th>
                                <th style="width: 25%">
                                    标题
                                </th>
                                <th style="width: 45%">
                                    内容
                                </th>
                                <td style="width: 10%">
                                    状态
                                </td>
                                <th style="width: 15%">
                                    管理
                                </th>
                            </tr>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <tr style="background-color: #FAF3DC; height: 30px;">
                            <td>
                                <%# Container.ItemIndex+1 %>
                            </td>
                            <td>
                                <%# getStr((Eval("title").ToString()),15)%>
                            </td>
                            <td>
                                <%# getStr((Eval("contents").ToString()),30)%>
                            </td>
                            <td>
                                <asp:Label ID="lblState" runat="server" Text='<%# change(Convert.ToInt32(Eval("status"))) %>'></asp:Label>
                            </td>
                            <td>
                                <asp:LinkButton ID="lbEdit" runat="server" CommandName="et" CommandArgument='<%# Eval("id") %>'
                                    Text="修改"></asp:LinkButton>
                            </td>
                        </tr>
                    </ItemTemplate>
                    <AlternatingItemTemplate>
                        <tr style="background-color: #eaeaea; height: 30px;">
                            <td>
                                <%# Container.ItemIndex+1 %>
                            </td>
                            <td>
                                <%# getStr((Eval("title").ToString()),15)%>
                            </td>
                            <td>
                                <%# getStr((Eval("contents").ToString()),30)%>
                            </td>
                            <td>
                                <asp:Label ID="lblState" runat="server" Text='<%# change(Convert.ToInt32(Eval("status"))) %>'></asp:Label>
                            </td>
                            <td>
                                <asp:LinkButton ID="lbEdit" runat="server" CommandName="et" CommandArgument='<%# Eval("id") %>'
                                    Text="修改"></asp:LinkButton>
                            </td>
                        </tr>
                    </AlternatingItemTemplate>
                    <FooterTemplate>
                        </table>
                    </FooterTemplate>
                </asp:Repeater>
                <webdiyer:AspNetPager CssClass="paginator" CurrentPageButtonClass="cpb" ID="anpFY"
                    runat="server" FirstPageText="首页" LastPageText="尾页" NextPageText="下一页" PrevPageText="上一页"
                    Width="100%" UrlPaging="true" ShowPageIndexBox="always" PageIndexBoxType="dropDownList"
                    HorizontalAlign="right" PageSize="10" EnableTheming="true" ShowNavigationToolTip="True"
                    OnPageChanged="anpFY_PageChanged">
                </webdiyer:AspNetPager>这是我的,你看着改下吧,应该可以用的,希望能够帮到你!
      

  24.   

    OnItemCommand="RepInfo_ItemCommand" OnItemDataBound="RepInfo_ItemDataBound"我有这样的需要,你没有可以删掉
      

  25.   

    .paginator
    {
    font: 11px Arial, Helvetica, sans-serif;
    padding: 10px 20px 10px 0;
    margin: 0px;
    }
    .paginator a
    {
    padding: 1px 6px;
    border: solid 1px #ddd;
    background: #fff;
    text-decoration: none;
    margin-right: 2px;
    }
    .paginator a:visited
    {
    padding: 1px 6px;
    border: solid 1px #ddd;
    background: #fff;
    text-decoration: none;
    }
    .paginator .cpb
    {
    padding: 1px 6px;
    font-weight: bold;
    font-size: 13px;
    border: none;
    }
    .paginator a:hover
    {
    color: #fff;
    background: #ffa501;
    border-color: #ffa501;
    text-decoration: none;
    }这是分页控件样式,都给你了!
      

  26.   

    你的List是什么数据?如果只是分好页的当前页的数据,那么你直接绑定到Repeater上就行了,AspNetPager要求的一个条件是指定要分页的记录总数,即RecordCount属性值;如果List中包含的是所有数据,那么你可以用PagedDataSource来分页,也可以用上面说的Skip()\Take()方法,这些方法是Linq扩展方法,你需要添加对linq的引用及引入命名空间才可以用。