1. gridview允许排序
AllowSorting="True"
2. 设置列的排序表达式
<asp:BoundField DataField="name" HeaderText="视图" SortExpression="name" >
<HeaderStyle Wrap="False" />
<ItemStyle HorizontalAlign="Left" />
</asp:BoundField>
其中,sortExpression时排序表达式,headerStyle wrap设置表头不换行,horizontalAlign设置该列的文本对齐方式。
3.实现sorting事件
protected void gdvSchema_Sorting(object sender, GridViewSortEventArgs e)
{
//获取排序表达式
String exp = e.SortExpression;
//保存在viewState中
ViewState["sortExp"] = exp;
//重新绑定数据源
gdvSchema.DataBind();
getSearch(0);
}
//绑定数据源的函数
private void getSearch(int iPageIndex)
{
//获取数据源
String sql= "select * from test";
SqlDataAdapter adp = new SqlDataAdapter (sql,conn);
DataSet ds = new DataSet();
adp.Fill(ds);
if (ds.Tables.Count > 0)
{
try
{
DataTable dt = ds.Tables[0];
if (dt.Rows.Count > 0)
{
//字段排序代码
DataView dv = new DataView(dt);
if (ViewState["sortExp"] != null)
dv.Sort = ViewState["sortExp"].ToString();
gdvSchema.DataSource = dv;
gdvSchema.PageIndex = iPageIndex;
gdvSchema.DataBind();
}
else
{
//无数据时处理方式
dt.Rows.Add(dt.NewRow());
gdvSchema.DataSource = ds;
gdvSchema.DataBind();
gdvSchema.Rows[0].Cells.Clear();
TableCell cell = new TableCell();
cell.Text = "未找到任何数据";
gdvSchema .Rows [0].Cells.Add(cell);
gdvSchema.Rows[0].Cells[0].ColumnSpan = dt.Columns.Count;
gdvSchema.Rows[0].Cells[0].HorizontalAlign = HorizontalAlign.Center;
}
}
catch (Exception ex)
{
Response.Write("getSearch() Exception: " + ex);
}
}
}
PS:gridview执行sorting事件时会同时执行rowCommand事件,所以在执行的时候需要保证rowCommand中不执行会抛异常的代码。