我发现很难将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控件来绑定它,但没有获得理想的结果。
有关如何实现这一目标的任何想法?
答案 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();