将linq查询结果绑定到gridview

时间:2012-10-22 20:06:28

标签: c# asp.net linq

我发现很难将linq查询结果绑定到我的asp.net页面上的gridview控件。在主要的Linq查询中,我从一个表中获得满足检查“表单已完成”的列标准的所有用户 -

using (COLA_AccreditationEntities4 eFactory = new COLA_AccreditationEntities4())
{
    var evaluations = eFactory.Symposium_Evaluation.Where(a => 
            (!a.Completed.HasValue || 
              a.Completed.Value == 0) && a.Active && a.UserID >= 2063).ToList();

然后在代码中我正在做一个foreach循环来从另一个表中获取与上一个表中的userid匹配的所有userid -

foreach (var eval in evaluations)
{
    var user = eFactory.SYMPOSIUM_Users.Where(a => a.UserID == eval.UserID.Value 
                         && a.Active.Value && a.UserRole == 1).FirstOrDefault();

    if (user != null && !users.Contains(user.UserID))
    {
        string name = user.FirstName + " " + user.LastName;
        string email = user.Email;
    }
}

我想做的就是在屏幕上显示user.firstname + user.lastname + user.email。我使用了gridview控件来绑定它,但没有获得理想的结果。

有关如何实现这一目标的任何想法?

2 个答案:

答案 0 :(得分:2)

您应该可以直接从查询中绑定到网格:

`var users = eFactory.SYMPOSIUM_Users.Where(a => a.UserID == eval.UserID.Value&& a.Active.Value&& a.UserRole == 1); this.mygrid.DataSource = users;

我建议您查看asp.net网站上的教程。那里有很多好的内容。

<强>更新
也许你最好的解决方案是从你的两个表的连接创建一个匿名类型,这样你就不会反复查询你的数据存储,你的数据绑定会更简单。

var result = (from i in eFactory.Symposium_Evaluation
              join user in eFactory.SYMPOSIUM_Users on i.UserID equals user.UserID
              where user.UserRole == 1 &&
                   ((!i.Completed.HasValue || 
                     i.Completed.Value == 0) && 
                    i.Active && a.UserID >= 2063)
              select new {
                  User = user,
                  Symposium = i
              }).ToList();

myDataGrid.DataSource = result;
myDataGrid.DataBind();

现在,您可以在网格行模板中执行以下操作:

<%#Eval("User.FirstName")%>
<%#Eval("User.LastName")%>
<%#Eval("User.Email")%>

答案 1 :(得分:0)

定义用户类型列表

List<User> users= new List<User>();

修改第二个代码块,如下所示

foreach (var eval in evaluations)
{
    var user = eFactory.SYMPOSIUM_Users.Where(a => a.UserID == eval.UserID.Value 
                         && a.Active.Value && a.UserRole == 1).FirstOrDefault();

    if (user != null && !users.Contains(user.UserID))
    {
        users.Add(user);  
    }
}

将gridview中的绑定代码修改为

<%#Eval("FirstName")%>
<%#Eval("LastName")%>

最后将您的网格与用户列表绑定

this.mygrid.DataSource = users;
this.mygrid.DataBind();