使用数据源和entity framework填充以编程方式声明的datagridview

只是与c#winforms datagridview有一些小问题。 这是我的情景

我正在使用entity framework,并试图将某些实体模型绑定到我的datagridview数据源。

var query = from q in context.foo select q; dgv_Disp.DataSource = query.ToList(); 

当我在一个在GUI中具有datagridview的表单类上运行上面这段代码时,一切正常。 datagridview将自动生成列和行数。

但是当我运行这个完全相同的代码,除了我在GUI中没有datagridview,我只是以编程方式声明它,然后像上面的代码一样设置数据源。 当我这样做时,不会生成任何行或列。

这两个不同的datagridviews有什么区别? 我知道在表单类的designer.cs文件中设置了属性。 但我尝试复制这些设置,但仍然不会填充。

我知道这可能很简单,但我根本无法解决这个问题。 如果有人能告诉我我做错了什么,那就太好了!

编辑

我使用过AutoGenerateColumns = true但它没有任何区别。 另外,我实际上并没有尝试显示这个datagridview,我只是将它绑定到实体对象,这样我可以使用字符串索引访问其成员。 但我不想查询数据库只是为了获取datagridview特定格式的信息,因为在我的实际场景中,我已经拥有了来自先前查询的实体数据。 我只是使用上面的代码作为例子。

你的代码应该工作。 下面是将List绑定到DataGridView示例代码,但是您需要将DataGridView添加到表单或其他面板(或容器)中

  public Form1() { InitializeComponent(); DataGridView gv = new DataGridView(); gv.DataSource = new List() { "sss", "aaa" }.Select(x => new { Name = x }).ToList(); this.Controls.Add(gv); // add gridview to current form or panel ( or container), then only it will display } 

起初我的设计中没有网格。 我也动态添加网格

  AmolEntities db=new AmolEntities(); DataGrid dataGridView1 = new DataGrid(); this.Controls.Add(dataGridView1); var v= from n in db.oe_subjects select n; dataGridView1.DataSource = v.ToList(); 

创建datagridview的对象时,需要进行设置

 dataGridView1.AutoGenerateColumns = true 

在为其分配数据源之前,请确保已完成此操作。

Winforms datagridview只生成列,如果它实际上是GUI的一部分。 通过在表单设计器中将所有datagridviews粘贴在表单上,​​datagridviews根据需要生成列。 我实际上并不需要表单所以我只是没有调用show()方法。 看起来像处理问题的一种黑客方式,但这就是我如何解决这个问题

我做得很轻松首先声明了同一个DataTable的一个新变量然后我把tableAdapter.Fill(dt); 然后dbGrid.DataSource = dt;

它工作得很好