我有一个gridview,它的数据源来自linq to sql语句:
var query = from user in dataContext.tbl_files
select new { user.File_Name, user.Upload_Time, user.Uploaded_By };
GridView1.DataSource = query.ToList();
GridView1.DataBind();
我正在尝试实现gridview的排序功能:
public void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
string previousSortExpression = (string)ViewState["SortDirection"];
string sortExpression = e.SortExpression;
SortDirection sortDirection = e.SortDirection;
if (sortExpression.Equals(previousSortExpression))
{
sortDirection = SortDirection.Descending;
ViewState["SortDirection"] = string.Empty;
}
else
ViewState["SortDirection"] = sortExpression;
string direction = sortDirection == SortDirection.Ascending ? "ASC" : "DESC";
e.SortExpression = string.Format("it.{0} {1}", e.SortExpression, direction);
DataTable dataTable = (DataTable)GridView1.DataSource; // here returns null!
if (dataTable != null)
{
DataView dataView = new DataView(dataTable);
dataView.Sort = e.SortExpression ;
GridView1.DataSource = dataView;
GridView1.DataBind();
}
}
但是" DataTable dataTable = (DataTable)GridView1.DataSource; "
行返回 null,但数据源计数为 4。我收到此错误:
{"Unable to cast object of type 'System.Collections.Generic.List
1[<>f__AnonymousType0
3[System.String,System.Nullable`1[System.DateTime],System.String]]' to type 'System.Data.DataTable'."}
如何对 gridview 进行排序并纠正错误?谢谢..
最佳答案
您不能使用网格的DataSource
属性来获取数据源。它仅在设置后和回发结束后才可用。您需要再次从数据库中获取数据。
像这样的事情:
public void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
var users = (from user in dataContext.tbl_files
select new { user.File_Name, user.Upload_Time, user.Uploaded_By }).ToList().AsEnumerable();
switch(e.SortExpression)
{
case "File_Name":
users = users.OrderBy(x => x.File_Name);
break;
case "Upload_Time":
users = users.OrderBy(x => x.Upload_Time);
break;
case "Uploaded_By":
users = users.OrderBy(x => x.Uploaded_By);
break;
}
if(e.SortDirection == SortDirection.Descending)
users = users.Reverse();
GridView1.DataSource = users;
GridView1.DataBind();
}
关于c# - ASP.NET 中的 Gridview 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8700884/