1

データ ソース コントロールを使用せずに、gridview でカスタム ページネーションを実装しようとしています。これまでのところ、優れた/完全なチュートリアルは見つかりませんでした。

グリッドビューを作成する方法は次のとおりです。

 <asp:GridView ID="GridView1" runat="server" AllowPaging="True" PageSize="10" 
               onpageindexchanging="GridView1_PageIndexChanging" ShowFooter="True">
 </asp:GridView>

ボタンがクリックされると、このグリッドにデータが取り込まれます。データベースからの行は、リストボックス コントロールの項目に基づいて選択する必要があります

protected void btnSearch_Click(object sender, EventArgs e)
{
    using (context = new TrackForceDataEntities())
    {
        try
        {
            string[] arr = lstStates.Items.Cast<ListItem>().Select(i => i.Text).ToArray();
            var searchResults = context.data_vault.Where(d => arr.Contains(d.STATE)).OrderByDescending(d=>d.STATE);

            GridView1.DataSource = searchResults;
            GridView1.DataBind();
         }
         catch (Exception exception)
         {
             Response.Write(exception.Message);
         }
     }
}

この上記のクエリは、すべてのレコードを取得しているため、非常に低速です。

次は gridviewPageIndexChangingイベントです。ページ 2 をクリックすると、ページ 2 の行が表示されますが、ページング リンクが表示されなくなります。

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    using (context = new TrackForceDataEntities())
    {
        try
        {
            // var searchResults = context.data_vault.Where(d => d.STATE == lstStates.SelectedItem.Text).OrderBy(d => d.dv_id).Take(10).Skip(2);


            //var selection = lstStates.Items(i => i.Text).ToArray();
            //var result = context.data_vault.Where(x => selection.Contains(x.Prop));

            string[] arr = lstStates.Items.Cast<ListItem>().Select(i => i.Text).ToArray();

            var result = context.data_vault.Where(d => arr.Contains(d.STATE)).OrderByDescending(d => d.STATE).Skip(e.NewPageIndex * GridView1.PageSize)
                                         .Take(GridView1.PageSize)
                .ToList();

            //var result = context.data_vault.Where(d => d.STATE == lstStates.SelectedItem.Text).OrderBy(d => d.STATE).Skip(e.NewPageIndex * GridView1.PageSize).Take(GridView1.PageSize).ToList();
            //// this is very important part too
            GridView1.PageIndex = e.NewPageIndex;

            GridView1.DataSource = result;
            GridView1.DataBind();

        }
        catch (Exception exception)
        {
            Response.Write(exception.Message);
        }
    }
}
4

1 に答える 1

0

次のリンクをたどると、答えが得られます。ページングは​​、ページ番号とページ サイズを渡すことにより、SQL サーバーを介して行われました。

ここをクリック

于 2012-06-09T07:31:58.433 に答える