我的gridview中有4列。当我单击任何列时,对该列只进行一次排序。我哪里错了?
这是我的代码:
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
Bind();
}
}
public void bind()
{
String connectionString = WebConfigurationManager.ConnectionStrings["ABConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(connectionString);
con.Open();
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter("select * from Table1",con);
try
{
da.Fill(ds, "Table1");
GridView1.DataSource = ds.Tables["Table1"];
Session["dttable"] = ds.Tables["Table1"];
GridView1.DataBind();
}
catch (Exception ex)
{
ex.ToString();
}
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
string sortExpression = e.SortExpression;
string direction = string.Empty;
SortDirection GridViewSortDirection = e.SortDirection;
if (GridViewSortDirection == SortDirection.Ascending)
{
GridViewSortDirection = SortDirection.Descending;
direction = " DESC";
}
else
{
GridViewSortDirection = SortDirection.Ascending;
direction = " ASC";
}
DataTable dt = (DataTable)Session["dttable"];
dt.DefaultView.Sort = sortExpression + direction;
GridView1.DataSource = dt;
GridView1.DataBind();
}
public SortDirection SortDirection
{
get
{
if (ViewState["SortDirection"] == null)
{
ViewState["SortDirection"] = SortDirection.Ascending;
}
return (SortDirection)ViewState["SortDirection"];
}
set
{
ViewState["SortDirection"] = value;
}
}
}
答案 0 :(得分:0)
您有一个用于在ViewState中存储SortDirection的属性,但我没有看到您在排序代码中的任何位置使用它。我会在这里使用viewstate项来保持SortExpression和SortDirection。
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
if (e.SortExpression.Equals(CurrentSortExpression, StringComparison.OrdinalIgnoreCase))
{
// Same sort expression, toggle direction
// This would probably be better in a private method or extension method
if (CurrentSortDirection == SortDirection.Ascending)
CurrentSortDirection = SortDirection.Descending;
else
CurrentSortDirection = SortDirection.Ascending;
}
else
{
// Different sort expression, default to asc
CurrentSortExpression = e.SortExpression;
CurrentSortDirection = SortDirection.Ascending;
}
string direction = "ASC";
if (CurrentSortDirection == SortDirection.Descending)
direction = " DESC";
DataTable dt = (DataTable)Session["dttable"];
dt.DefaultView.Sort = CurrentSortExpression + direction;
GridView1.DataSource = dt;
GridView1.DataBind();
}
public SortDirection CurrentSortDirection // renaming to make it distinguishable
{
get
{
return (SortDirection)(ViewState["SortDirection"] ?? SortDirection.Ascending);
}
set
{
ViewState["SortDirection"] = value;
}
}
public string CurrentSortExpression
{
get
{
return ViewState["SortExpression"] ?? "some default expression";
}
set
{
ViewState["SortExpression"] = value;
}
}