1

私はグリッドビューを持っていて、最初のページの読み込み時にそれをバインドします。同じページにいくつかの検索オプションがあります。検索ボタンをクリックすると、検索をクエリし、検索結果から出てくる新しいデータソースでグリッドビューを再バインドします。問題グリッドビューを再バインドした後、最初のページロード データ バインディングでは発生しないページングの問題があります。それはなぜですか?

ここに私の Page_Load coe があります:

protected void Page_Load(object sender, EventArgs e)
{
    DisableChaching();
    string val = Convert.ToString(Session["AccessLevel"]);
    if (Request.Cookies["UserName"] == null)
    {
        if (Session["UserName"] == null)
        {
            Response.Redirect("~/Default.aspx");
        }
        else if (val   == "2")
        {
            Response.Redirect("~/Default.aspx");
        }
    }
    else if (val == "2")
    {
        Response.Redirect("~/Default.aspx");
    }
    if (!IsPostBack)
    {
        LoadControls();
        BindGrid();
    }
}

私の GV_PageIndexChanging :

protected void GV_PageIndexChanging(object sender, GridViewPageEventArgs e)
{

    GV.PageIndex = e.NewPageIndex;
    BindGrid();
    PageStatus(Status.None);
}

私の btnSearch_Click :

 protected void btnSearch_Click(object sender, ImageClickEventArgs e)
 {
query = new CommonQueries();
       GV.DataSource = query.getBooksByGroupIDSubGroupID(DrpGroup.SelectedItem.Value,DrpSubGroup.SelectedItem.Value);
     GV.DataBind();
 }

CommonQueries クラスには、以前に使用した次のクエリがあります。

    public List<Book> getBooksByGroupIDSubGroupID(string GroupID, string SubGroupID)
{
    db = new BookMarketDataContext();
    List<Book> list = new List<Book>();
    list = (from b in db.Books where b.GroupID.ToString() == GroupID && b.SubGroupID.ToString() == SubGroupID  orderby b.Name select b).ToList();
    return list;
}

より具体的に:ページの読み込みでは、グリッドビューページの変更に問題はありませんが、検索ボタン「btnSearch」をクリックしてグリッドビューを再バインドした後、検索結果がグリッドビューにページ番号を持たせるのに十分である場合、および私がこれらのページ番号の 1 つをクリックしてください。前の page_Load から間違った結果が得られました。

4

1 に答える 1

1

ページングのポストバックには、ページングする必要があるビューステートに関する情報が含まれていないようです。その情報をページにプッシュして、ポストバックに含めるか、ユーザー セッションに保存する必要があります (ラウンドトリップが少なくなり、サーバーの重みが増しますが、クエリ結果も保存している場合は応答が速くなります)。 ..

于 2012-05-08T15:28:43.480 に答える