把GridView的AllowSorting设置为True,在编辑列中设置相关的SortExpression表达式(注要和数据库中的字段保持一致)
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView1.Attributes.Add("SortExpression", "id");
GridView1.Attributes.Add("SortDirection", "ASC");
bind();
}
}
//添加GridView的Attributes属性(注不能直接使用GridView的SortExpression和SortDirection属性因为这两个属性是只读的无法赋值)
void bind()
{
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlDataAdapter sda = new SqlDataAdapter("select * from student ", con))
{
DropDownList ddl;
con.Open();
DataTable dt = new DataTable();
sda.Fill(dt);
dt.DefaultView.Sort = string.Format("{0} {1}", GridView1.Attributes["SortExpression"], GridView1.Attributes["SortDirection"]);
GridView1.DataSource = dt;
GridView1.DataKeyNames = new string[] { "id" };
GridView1.DataBind();
for (int i = 0; i < GridView1.Rows.Count; i++)
{
DataRowView drv = dt.DefaultView[i];
if (Convert.ToString(drv["sex"]) == "男")
{
ddl = (DropDownList)GridView1.Rows[i].FindControl("ddlSex");
ddl.SelectedIndex = 0;
}
else
{
ddl = (DropDownList)GridView1.Rows[i].FindControl("ddlSex");
ddl.SelectedIndex = 1;
}
}
}
}
}
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
//获取排序表达式
string sortExpression = e.SortExpression;
//假定排序方式为升序
string sortDirection = "ASC";
//查看是否有这样的表达式
if (sortExpression == GridView1.Attributes["SortExpression"])
{
//获取下一次的排序顺序,在这注意巧妙用法————都是ASC则下次为DESC,不一样则为ASC
sortDirection = (sortDirection == GridView1.Attributes["SortDirection"].ToString()? "DESC" : "ASC");
}
//重新获取排列项及排序顺序
GridView1.Attributes["SortDirection"] = sortDirection;
GridView1.Attributes["SortExpression"] = sortExpression;
bind();
}