网格视图排序 ASP.NET
本文关键字:NET ASP 排序 视图 网格 | 更新日期: 2023-09-27 18:19:18
我有一个网格视图,它的数据源来自linq到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();
我正在尝试实现网格视图的排序功能:
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。我收到此错误:
{"无法将类型为'System.Collections.Generic.List
1[<>f__AnonymousType0
3[System.String,System.Nullable'1[System.DateTime],System.String]]'的对象转换为类型'System.Data.DataTable'。
如何对网格视图进行排序并纠正错误?谢谢。。
不能
使用网格的 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();
}
上面的答案是正确的,首先您需要在调用排序事件时再次将数据源分配给网格视图。
所以必须将数据存储在某个地方。
要从网格检索数据源,您可以按照以下步骤操作
问题在于您将 linq 结果分配为 gridview 的数据源,然后从网格视图数据源获取数据表。
试试这个代码
BindingSource bs = (BindingSource )Gv.DataSource;
DataTable Dt = (DataTable ) bs.DataSource;
如有任何疑问,请联系