我的数据是从outlook直接放到dataset然后绑定到gridview的,所以没办法用sql排序,
把数据绑到gridview后分页显示了,然后我想按某列排序,在网上也搜了不少方法,就是弄不出来,崩溃了。设了Allowsoting 为True也不管用
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["sortExpression"] = "id";
ViewState["sort"] = " DESC";
GridBind();
}
} protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
ViewState["sortExpression"] = e.SortExpression;
if (ViewState["sort"].ToString() == " DESC")
{
ViewState["sort"] = " ASC";
GridBind();
}
else
{
ViewState["sort"] = " DESC";
GridBind();
}
}
private void GridBind()
{
DataSet myset = DataProxy.GetDataSet();
DataView myview = myset.Tables[0].DefaultView;
myview.Sort = ViewState["sortExpression"].ToString() + ViewState["sort"].ToString();
GridView1.DataSource = myview;
GridView1.DataBind();
}这段代码好像有用,但是我不知道哪个地方可以写我要排序的列名。我是太笨了,谢谢大家能来指教,感激不尽!
把数据绑到gridview后分页显示了,然后我想按某列排序,在网上也搜了不少方法,就是弄不出来,崩溃了。设了Allowsoting 为True也不管用
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["sortExpression"] = "id";
ViewState["sort"] = " DESC";
GridBind();
}
} protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
ViewState["sortExpression"] = e.SortExpression;
if (ViewState["sort"].ToString() == " DESC")
{
ViewState["sort"] = " ASC";
GridBind();
}
else
{
ViewState["sort"] = " DESC";
GridBind();
}
}
private void GridBind()
{
DataSet myset = DataProxy.GetDataSet();
DataView myview = myset.Tables[0].DefaultView;
myview.Sort = ViewState["sortExpression"].ToString() + ViewState["sort"].ToString();
GridView1.DataSource = myview;
GridView1.DataBind();
}这段代码好像有用,但是我不知道哪个地方可以写我要排序的列名。我是太笨了,谢谢大家能来指教,感激不尽!
id就是列名,你把“id”改成你需要排序的字段
{
DataSet myset = DataProxy.GetDataSet();
DataView myview = myset.Tables[0].DefaultView;
myview.Sort = ViewState["sortExpression"].ToString() + ViewState["sort"].ToString();
GridView1.DataSource = myview;
GridView1.DataBind();
}
改为:
private void GridBind()
{
DataSet myset = DataProxy.GetDataSet();
IEnumerable<DataRow> drs = DataTableExtensions.AsEnumerable(myset.Tables[0]);
//var d = drs.OrderBy(p => p.Field<字段类型>("排序的字段名")).ToList(); //顺序
//var d = drs.OrderByDescending(p => p[0]).ToList()); //倒序
var d = drs.OrderByDescending(p => p.Field<字段类型>("排序的字段名")).ToList(); //倒序
GridView1.DataSource = d;
GridView1.DataBind();
}
#region Page_Load
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.GridView1.Attributes.Add("SortExpression", "TestID");
this.GridView1.Attributes.Add("SortDirection", "ASC");
//绑定GridView
fn_DataBind();
}
}
#endregion #region 得到绑定GridView的DataTable
private DataTable fn_getDataTable()
{
string strSql = " SELECT TestID, TestUser, TestTime FROM Test ";
DBClass db = new DBClass();
DataSet ds = db.RunSelectGetDataSet(strSql);
return ds.Tables[0];
}
#endregion #region 分页
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex;
fn_DataBind();
}
#endregion #region 排序
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
if (e.SortExpression != "")
{
if (GridView1.PageCount > 0)
{
//设定排序方向
string SortDirection = "ASC";
SortDirection = (this.GridView1.Attributes["SortDirection"].ToString() == SortDirection ? "DESC" : "ASC");
this.GridView1.Attributes["SortExpression"] = e.SortExpression;
this.GridView1.Attributes["SortDirection"] = SortDirection;
//重新绑定数据
fn_DataBind();
}
}
}
#endregion #region 绑定GridView
private void fn_DataBind()
{
DataTable dt = fn_getDataTable();
string SortDirection = this.GridView1.Attributes["SortDirection"].ToString();
string SortExpression = this.GridView1.Attributes["SortExpression"].ToString();
dt.DefaultView.Sort = string.Format("{0} {1}", SortExpression, SortDirection);
this.GridView1.DataSource = dt;
this.GridView1.DataBind();
}
#endregion
借用此法实现了排序和分页两种功能
谢谢大家回复