C# 从匿名Linq查询填充WinForms DataGridView
//从我的表格C# 从匿名Linq查询填充WinForms DataGridView,c#,winforms,linq,linq-to-sql,datagridview,C#,Winforms,Linq,Linq To Sql,Datagridview,//从我的表格 BindingSource bs = new BindingSource(); private void fillStudentGrid() { bs.DataSource = Admin.GetStudents(); dgViewStudents.DataSource = bs; } //来自管理类 public static List<Student> GetStudents() { DojoDBDataContext conn
BindingSource bs = new BindingSource();
private void fillStudentGrid()
{
bs.DataSource = Admin.GetStudents();
dgViewStudents.DataSource = bs;
}
//来自管理类
public static List<Student> GetStudents()
{
DojoDBDataContext conn = new DojoDBDataContext();
var query =
(from s in conn.Students
select new Student
{
ID = s.ID,
FirstName = s.FirstName,
LastName = s.LastName,
Belt = s.Belt
}).ToList();
return query;
}
publicstaticlist GetStudents()
{
DojoDBDataContext conn=新的DojoDBDataContext();
变量查询=
(来自康涅狄格州s的学生)
选择新学生
{
ID=s.ID,
FirstName=s.FirstName,
LastName=s.LastName,
皮带=s.皮带
}).ToList();
返回查询;
}
我试图在Winforms中填充datagridview控件,我只需要其中的几个值。代码进行编译,但引发运行时错误:
不允许在查询中显式构造实体类型“DojoManagement.Student”
有没有办法让它以这种方式工作?只需返回匿名类型的对象列表:
public static List<object> GetStudents()
{
DojoDBDataContext conn = new DojoDBDataContext();
var query =
(from s in conn.Students
select new
{
ID = s.ID,
FirstName = s.FirstName,
LastName = s.LastName,
Belt = s.Belt
}).Cast<object>().ToList();
return query;
}
publicstaticlist GetStudents()
{
DojoDBDataContext conn=新的DojoDBDataContext();
变量查询=
(来自康涅狄格州s的学生)
选择新的
{
ID=s.ID,
FirstName=s.FirstName,
LastName=s.LastName,
皮带=s.皮带
}).Cast().ToList();
返回查询;
}
您已经有了一个IEnumerable
实例,由于上述原因,您无法从查询中投影实体)
您也不需要创建绑定到此数据源的列表-通过将其更改为以下内容,可以大大简化您的方法:
public static IEnumerable<Student> GetStudents()
{
return new DojoDBDataContext().Students;
}
有一次,我四处寻找在Gridview上显示结果的解决方案。 我遇到的问题是,我忘记在Winform上将datagrid的属性:“Data Source”设置为None 这是使用linq显示gridview的简单解决方案(仅示例代码)
我正在投影一个新的学生实例,因为。。。我真的不知道我在做什么(显然)。我可以很容易地从所有学生那里获得所有信息,但我只需要几个字段,并且在运行时填充datagrid视图,因为它是只读的。太好了,这很有效!我忍不住想,还有比强制转换更好的方法。好吧,你不能返回匿名类型的列表,不能将a
列表分配给对象列表。。。所以你必须投。无论如何,最好是从GetStudents返回真实的Student对象,并仅在分配数据源之前执行投影。我们正在查看所有高级绑定相关解决方案,而忽略了最简单的解决方案。这个为我解决了。谢谢
public static IEnumerable<Object> GetStudents()
{
DojoDBDataContext conn = new DojoDBDataContext();
return conn.Students
.Select(s => new {
ID = s.ID,
FirstName = s.FirstName,
LastName = s.LastName,
Belt = s.Belt
});
}
public static IEnumerable<Object> GetStudents()
{
DojoDBDataContext conn = new DojoDBDataContext();
return conn.Students
.Select(s => new {
ID = s.ID,
FirstName = s.FirstName,
LastName = s.LastName,
Belt = s.Belt
}).Cast<Object>();
}
DataGrid dataGrid1 = new DataGrid();
var custQuery =
from cust in db.Customers
select cust;
dataGrid1.DataSource = custQuery;