GridView PageIndexChanging事件

时间:2012-08-01 16:06:03

标签: asp.net gridview

我有一个gridview,我在后面和我设置的PageIndexChanging事件中设置了boundfields和数据源:

protected void grvList_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
   grvList.PageIndex = e.NewPageIndex;    
    grvList.DataBind();
}

BoundFields也来自数据库,我已添加如下:

foreach (DataRow drColumn in dtColumns.Rows)
{
   BoundField bfEmbeddedColumn = new BoundField();    
   bfEmbeddedColumn.HeaderText = drColumn["ColName"].ToString();    
   bfEmbeddedColumn.DataField = drEmbeddedTaskColumn["ColName"].ToString();    
   bfEmbeddedColumn.ItemStyle.Width = 120;    
   grvList.Columns.Add(bfEmbeddedColumn);
}

它确实显示了下一页的记录,但我的问题是每次更改页面索引时都会再次添加boundfields。我怎样才能防止这种情况发生,有什么方法可以解决这个问题?

非常感谢。

3 个答案:

答案 0 :(得分:0)

你必须将以下索引移到变量e到寻呼机。
试试这个:

    grdSqlQuery.PageIndex = e.NewPageIndex
    grdSqlQuery.DataSource = ViewState("dts_Sqlquery")
    grdSqlQuery.DataBind()

答案 1 :(得分:0)

找到解决方案。我的问题是由于Page_Load我一遍又一遍地添加boundfields这一事实造成的。

答案 2 :(得分:0)

protected void GridView1_PageIndexChanged(object sender, EventArgs e)
{
        try
        {
        int count = 0;
        SetData();
        GridView1.AllowPaging = false;
        GridView1.DataBind();
        ArrayList arr = (ArrayList)ViewState["SelectedRecords"];
        count = arr.Count;
        for (int i = 0; i < GridView1.Rows.Count; i++)
        {
            if (arr.Contains(GridView1.DataKeys[i].Value))
            {
                Session.Add("PatientID", GridView1.DataKeys[i].Value.ToString());
                arr.Remove(GridView1.DataKeys[i].Value);
                Response.Redirect("~/EditPaitientDetails.aspx");
            }
        }
        ViewState["SelectedRecords"] = arr;
        hfCount.Value = "0";
        GridView1.AllowPaging = true;
        BindGrid();

        //ShowMessage(count);
    }
    catch (Exception ex)
    {

    }

}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex;
    BindGrid();
}