大家好我想通过设置AllowSorting =“True”来排序我的asp网格。我还为活动添加了代码,但我似乎无法使其正常工作..
private void PopulateGridView()
{
var a = from c in sample_worker.get()
select new
{
c.CemID,
c.Title,
c.Description
};
grd_sample.DataSource = a;
grd_sample.DataBind();
}
这是填充网格的代码。我在!ispostback下面添加了这个..
排序代码..
private string ConvertSortDirectionToSql(SortDirection sortDirection)
{
string newSortDirection = String.Empty;
switch (sortDirection)
{
case SortDirection.Ascending:
newSortDirection = "ASC";
break;
case SortDirection.Descending:
newSortDirection = "DESC";
break;
}
return newSortDirection;
}
protected void grd_sample_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dataTable = grd_sample.DataSource as DataTable;
if (dataTable != null)
{
DataView dataView = new DataView(dataTable);
dataView.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection);
grd_sample.DataSource = dataView;
grd_sample.DataBind();
}
}
我该怎么做才能解决这个问题..我也可以来回排序吗? desc - asc - desc。 if(dataTable!= null)也总是为空。
提前致谢
答案 0 :(得分:0)
你有很多错误:
您的方法PopulateGridView将IQuerable绑定到您的gridview,但是当您处理OnSorting时,您假装能够将DataTable作为GridView的DataSource。
此行:DataTable dataTable = grd_sample.DataSource as DataTable;
将始终返回NULL
,因为您的gridview未保留对DataSource的引用。您需要重新获取数据,对其进行排序并重新绑定。换句话说,您需要在grd_sample_Sorting
protected void grd_sample_Sorting(object sender, GridViewSortEventArgs e)
{
var a = from c in sample_worker.get()
select new
{
c.CemID,
c.Title,
c.Description
};
if(e.SortDirection=="ASC")
{
if(e.SortExpression=="CemID")
a=a.OrderBy(x=>x.CemID);
else if (e.SortExpression=="Title")
a=a.OrderBy(x=>x.Title);
//And so on...
}
else
{
if(e.SortExpression=="CemID")
a=a.OrderByDescending(x=>x.CemID);
else if(e.SortExpression=="Title")
a=a.OrderByDescending(x=>x.Title);
//And so on...
}
grd_sample.DataSource = a;
grd_sample.DataBind();
}
但坦率地说,你可能最好为你的datagridview定义一个LinqDataSource。 LinqDataSource几乎不需要编写一行代码就可以执行分页,排序和CRUD操作。当然不适合排序和分页。