我有一个位于更新面板中的网格视图。当您单击列标题时,排序工作正常,但如果我转到下一页,排序就会丢失。我将提供下面的代码,如果有人知道如何摆脱这个混乱,请帮忙!
在Page_Load中调用ShowGrid()函数。我猜测问题在于调用分页函数中的 ShowGrid() 。
//Show Grid based on argument type
protected void ShowGrid(string arg)
{
//dataset to hold email addresses
DataSet ds = new DataSet();
try
{
//open connection with new connection string
conn.Open();
String selectString = String.Format("SELECT * FROM hr_OnlineJobApp"
+ " WHERE adminCategory='" + adminCategory + "'"
+ "AND departmentApplyingFor LIKE '" + dept + "' ORDER BY {0} {1}", ViewState["sortExp"], ViewState["sortOrder"]);
SqlCommand cmd = new SqlCommand(selectString, conn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(ds);
//bind to gridview
GridView1.DataSource = ds;
GridView1.DataBind();
GridView1.PageIndex = Convert.ToInt32(ViewState["pageIndex"]);
}
finally
{
if (conn != null)
conn.Close();
}
}
/**********************************************
* Paging functionality
* *******************************************/
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
//reshow Grid with current type
adminCategory = GridView1.DataKeys[0]["adminCategory"].ToString();
ViewState["pageIndex"] = e.NewPageIndex.ToString();
ShowGrid(adminCategory);
}
/**********************************************
* Sorting functionality
* *******************************************/
protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
string sortExp = e.SortExpression;
ViewState["sortExp"] = sortExp;
string sortDir = (string)ViewState["sortOrder"];
//Changes the sortDir
if (ViewState["sortOrder"].ToString() == "desc")
{
ViewState["sortOrder"] = "asc";
}
else
{
ViewState["sortOrder"] = "desc";
}
try
{
conn.Open();
string sql = "SELECT * FROM hr_OnlineJobApp"
+ " WHERE adminCategory='" + adminCategory + "'"
+ "AND departmentApplyingFor LIKE '" + dept + "' ORDER BY " + sortExp + " " + sortDir;
SqlDataAdapter mySqlAdapter = new SqlDataAdapter(sql, conn);
DataSet myDataSet = new DataSet();
mySqlAdapter.Fill(myDataSet);
GridView1.DataSource = myDataSet;
GridView1.DataBind();
}
finally
{
conn.Close();
}
}
您正在将
PageIndex
中的 Showgrid
设置为 0:
GridView1.PageIndex = 0;
因此您将覆盖
PageIndexChanging
中的新值
GridView1.PageIndex = e.NewPageIndex;
因此您不需要在 ShowGrid 中设置 PageIndex 来解决问题。
问题的另一个可能原因:
也许您在每次从
Page_Load
回发时都对 GridView 进行数据绑定。您应该只在第一次时这样做。使用 Page.IsPostBack
属性:
protected void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
ShowGrid();
}
最后但并非最不重要的:仅当用户单击
gridView_Sorting
中的标题时才进行排序。您还应该在 ORDER BY
中应用 ShowGrid
或仅使用一种方法对 GridView 进行数据绑定。但你总是通过 date desc
在那里订购。
您不应该使用 DataView 来应用排序,而应该首先在 sql 中使用
ORDER BY
。
String sql = String.Format("SELECT * FROM hr_OnlineJobApp"
+ " WHERE adminCategory='"+adminCategory+"'"
+ " ORDER BY {0} {1}", sortExp, sortDir);
SqlCommand mySqlCommand = new SqlCommand(sql, conn);
当您在 ShowGrid() 函数中设置 GridView1.PageIndex = 0 ,然后在 Page_Load 事件上调用该函数时。因此,在每次回发时,页面索引都设置为 0,这会产生问题。您应该删除该行来解决问题。