到目前为止,我有一个linq查询,可以完全使用filterconditions填充数据网格。 但是,当我尝试实现排序时,我失败了。
我有以下代码。它抓住了这种类型的开始。
protected void gvServers_Sorting(object sender, GridViewSortEventArgs e)
{
if (e.SortDirection == SortDirection.Ascending)
{
SortDataAsc(e.SortExpression);
}
else if (e.SortDirection == SortDirection.Descending)
{
SortDataDesc(e.SortExpression);
}
}
在这些子方法中,我想要对每个可能的排序表达式进行排序。 但是,当我尝试使用gridview中已有的数据时,它将不允许我使用orderby来获取它
private void SortDataAsc(string p)
{
var data = gvServers.DataSource;
switch (p)
{
case "domain":
var sorted = data.nothinghappenshere
default:
break;
}
}
正如你所看到的那样,我无法对数据进行排序,因为它是一个var,因此无法对数据进行排序。
我在网上看到的是,你可以在我尝试在SortDataAsc()中从gridview获取数据,但它似乎没有那样工作。
我只想按结果集中的某个字段排序(在这种情况下是从连接派生的匿名类)
答案 0 :(得分:1)
嗯,这是因为DataSource
是弱类型的。
如果你把它投到IEnumerable<YourDataType>
那就应该没事了。但请注意,OrderBy
和OrderByDescending
没有排序 - 您必须订购数据,然后重新分配DataSource
。
你说你的数据类型是匿名类型 - 你必须改变它,我很害怕。匿名类型只能(轻松)以单一方法的强类型方式使用 - 您不能在以后指定名称,因此您不能引用相同的属性等。
将匿名类型转换为命名类型并不是非常困难。 Here's an answer giving an example.