GridView本身有一个Sort()函数:public virtual void Sort (
使用上相当方便。
string sortExpression, SortDirection sortDirection)
但在实际使用中,常用的是点击每一列的标题来排序,点击标题会触发:protected void GridView_Sorting(object sender, GridViewSortEventArgs e)
事件。从GridViewSortEventArgs
中可以拿到SortDirection
和SortExpression
。但是GridView.Sort()
本身也会触发GridView_Sorting()
,如果在GridView_Sorting()
中调用GridView.Sort()
会无限的循环,直到堆栈溢出。
这样就只能使用DataView.Sort
属性来排序,再Bind到GridView上。
示例:protected string m_sortDirection
{
get
{
if (ViewState["m_SortDirection"] == null)
{
return String.Empty;
}
return (string)ViewState["m_SortDirection"];
}
set { ViewState["m_SortDirection"] = value; }
}
protected string m_sortExpression
{
get { return (string)ViewState["m_SortExpression"]; }
set { ViewState["m_SortExpression"] = value; }
}
protected void bindData(string sortExpression, string sortDirection)
{
DataView dv = new DataView(ds.Tables[0]);
dv.Sort = sortExpression;
if (sortDirection != String.Empty)
{
dv.Sort += " " + sortDirection;
}
gvRequisition.DataSource = dv;
gvRequisition.DataBind();
}
protected void GridView_Sorting(object sender, GridViewSortEventArgs e)
{
m_sortExpression = e.SortExpression;
if (m_sortDirection == "ASC")
{
m_sortDirection = "DESC";
}
else if (m_sortDirection == "DESC")
{
m_sortDirection = "ASC";
}
bindData(m_sortExpression, m_sortDirection);
}
Comments
ds应该是个DataSet。这段代码是从实际项目中复制出来的,可能删除的时候误删了。
to Anonymous:
没有用过Gridview.Sort(),如果你让另一时间来触发Gridview.Sort()应该不会有什么问题。