所以我懒得加载转发器控件:
要遵循的代码将转发器绑定到guestbookData属性,该属性由loadGuestbook()填充
public partial class _Default
{
private DataTable _guestbookData;
public DataTable guestbookData
{
get
{
if (_guestbookData == null)
{
_guestbookData = loadGuestbook();
}
return _guestbookData;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataBind();
}
}
private DataTable loadGuestbook()
{
netguestData nd = new netguestData();
List<post> data = nd.GetPosts(10, rptGuestbook.Items.Count);
DataTable dt = new DataTable();
// writing the list to a DataTable for bind happens here.
// not sure how to cast IEnumerable to DataTable, else I'd do that
return dt;
}
protected void btnLoadMore_Click(object sender, EventArgs e)
{
DataBind();
}
}
使用LINQ To SQL从数据库中查询数据。这是我正在使用的GetPosts(int,int)函数:
public class netguestData
{
private netguestEntities ne = new netguestEntities();
public netguestData()
{
}
public List<post> GetPosts(int Take, int Skip)
{
var posts = (from p in ne.posts
.OrderByDescending(p => p.postdate)
.Take(Take)
.Skip(Skip)
select p).ToList();
return posts;
}
}
现在,为了解决这个问题,我基本上每页加载10行,并使用转发器中的项目数作为参考,以便跳过所选数据中的行数。
当页面第一次加载时,我得到了我最初的10条记录而没有任何问题,但是当我点击按钮加载下一组时,它会显示为空白。
调试器中的消息是:
枚举没有产生结果
我在点击后检查了Take
和Skip
值,两者都是10,正如预期的那样。表中有200多行,所以我无法理解问题所在。
有人可以建议我做些什么来解决这个问题吗?
提前致谢!
答案 0 :(得分:4)
你可能想先跳过然后跳。 (首先进行拍摄然后跳过没有多大意义。)
答案 1 :(得分:1)
通过您的查询推理:
var posts = (from p in ne.posts
.OrderByDescending(p => p.postdate)
.Take(Take)
.Skip(Skip)
select p).ToList();
在第一次尝试时,您正在拍摄10个帖子并跳过那些10个的0个。 在接下来的尝试中,您将发布10个帖子并跳过10个那些10个,这显然没有结果。
正如它所写,你总是在查询10个最新的结果,除了你第一次跳过0,并跳过所有结果。
就像@Becuzz所说的那样,你只想交换跳过并接受,这样你就可以跳过原始查询中的结果返回并从余数中取出。
var posts = (from p in ne.posts
.OrderByDescending(p => p.postdate)
.Skip(Skip)
.Take(Take)
select p).ToList();