对绑定到Linq查询的GridView进行排序

时间:2011-06-30 01:55:10

标签: c# asp.net linq gridview

我有一个使用Linq查询填充的GridView

var usersToApprove = from rl in QVDash.Permisisons
                           join u in QVDash.Userson rl.UserId equals u.UserId
                           join d in QVDash.Dashboards on rl.DashboardId equals d.DashboardId 
                           where (u.ApprovedBy == approverId || isGod)
                           select new
                           {
                               PermissionId = rl.PermissionId,
                               Name = u.Name,
                               Area = u.Area,
                               Dashboard = d.DashboardName,
                               OpUnit = rl.Operational_Unit,
                               Cost_Centre = rl.Cost_Centre,
                               Fund = rl.Fund,
                               Project = rl.Project,
                               Approver = (from a in QVDash.Users where a.UserId == u.UserId && a.UserId == u.ApprovedBy select a.Name).FirstOrDefault()
                           };

        grd_CurrentUsers.DataSource = usersToApprove ;
        grd_CurrentUsers.DataKeyNames = new string[] { "PermissionId" };
        grd_CurrentUsers.DataBind();

然而,这提出了一个问题,即GridView不允许排序。

我已经尝试了一些我已经找到的选项来构建一个自定义排序功能,但是我发现它最好是粗略的,这些问题如下:只有一种方式排序,分页重置排序等

我想知道的是,如果有更好的方法可以做到这一点。

我知道将gridview绑定到数据源可以解决排序问题,但是我不知道如何将Linq绑定到数据源。有可能吗?

2 个答案:

答案 0 :(得分:1)

您是否尝试过LinqDataSource控件?看看这个链接。 http://weblogs.asp.net/scottgu/archive/2007/09/07/linq-to-sql-part-9-using-a-custom-linq-expression-with-the-lt-asp-linqdatasource-gt-control.aspx

关键部分:“为了处理自定义查询场景,您可以实现一个事件处理程序来处理控件上的”Selecting“事件。在这个事件处理程序中,您可以编写任何想要检索数据模型结果的代码。” p>

这允许您使用自定义LINQ查询进行排序,分页等。

答案 1 :(得分:0)

最后用这个网站的排序代码弄明白了 http://forums.asp.net/t/1368247.aspx