だから私はリピーターコントロールを怠惰にロードしています:
次のコードは、リピーターを、loadGuestbook() によって入力される guestbookData プロパティにバインドします。
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;
}
}
これをページングするには、基本的に 1 ページあたり 10 行をロードし、リピーターの項目数を参照して、選択したデータでスキップする行数を指定します。
ページが初めてロードされると、最初の 10 レコードは問題なく取得されますが、ボタンをクリックして次のセットをロードすると、空白になります。
デバッガーのメッセージは次のとおりです。
列挙しても結果が得られませんでした
Take
クリック後にとの値を確認しましたがSkip
、予想どおり、両方とも 10 です。テーブルの行数が 200 行を超えているため、何が問題なのかわかりません。
これを修正するために私にできることを誰かが提案できますか?
前もって感謝します!