我做的类似与一个论坛的东西。获取帖子并分页。 
两个方案,该用那个或者还有什么其他方法? 
方案一:我声明了一个Pages.它是一个集合,每个元素都是一个(Page类型)代表一个帖子,每个帖子(Page)都有title,text属性。我写了一个存储过程,每次获取20条帖子并添加到Pages中,并将Pages绑定到GridView中,并另外添加了按钮“下一页”(每次点击都要再调用存储过程获取20条记录,将新的帖子覆盖Pages对象中原来的帖子)。 
方案二:直接用数据源绑控件绑定定GridView。 这两种那种好?首先考虑性能。 
或者还有其他什么方法?我要实现分页功能。说说原理就可以,不需要源代码。谢谢各位

解决方案 »

  1.   

    我是用下面的方法,调用这个方法想得到第几页的内容都行,再重新和数据控件绑定就可以:
    public override List<Message> GetMessage(int pageIndex, int pageSize, out int totalRecords)
            {
                if (pageIndex < 0)
                    throw new ArgumentException("PageIndex cannot be negative");
                if (pageSize < 1)
                    throw new ArgumentException("PageSize must be positive");            long lBound = (long)pageIndex * pageSize;
                long uBound = lBound + pageSize - 1;            if (uBound > System.Int32.MaxValue)
                {
                    throw new ArgumentException("PageIndex too big");
                }            List<Message> messageCollection = new List<Message>();            AccessConnectionHolder holder = AccessHelper.GetConnection(_databaseFileName, true);
                OleDbConnection connection = holder.Connection;
                OleDbDataReader reader = null;
                long recordCount = 0;
                try
                {
                    try
                    {
                        OleDbCommand command = new OleDbCommand(@"SELECT Id,Writer,Face,Title,Content,WriteDate,Reply,ReplyDate " +
                                                                @"FROM aspnet_Guestbook ORDER BY Id DESC",
                                                                connection);                    reader = command.ExecuteReader(CommandBehavior.SequentialAccess);
                        while (reader.Read())
                        {                        recordCount++;
                            if (recordCount - 1 < lBound || recordCount - 1 > uBound)
                                continue;
                            Message m = new Message(reader.GetInt32(0), reader.GetString(1), reader.GetString(2), reader.GetString(3), reader.GetString(4), reader.GetDateTime(5), reader.GetString(6), reader.GetDateTime(7));                        messageCollection.Add(m);
                        }                    totalRecords = (int)recordCount;
                        return messageCollection;
                    }
                    catch (Exception e)
                    {
                        throw AccessHelper.GetBetterException(e, holder);
                    }
                    finally
                    {
                        if (reader != null)
                            reader.Close();
                        holder.Close();
                    }
                }
                catch
                {
                    throw;
                }
                        }