C# 使用数据源和实体框架填充编程声明的datagridview

C# 使用数据源和实体框架填充编程声明的datagridview,c#,entity-framework,datagridview,datasource,C#,Entity Framework,Datagridview,Datasource,只是c#winforms datagridview有一些小问题。这是我的设想 我正在使用实体框架,并试图将某些实体模型绑定到我的datagridview数据源 var query = from q in context.foo select q; dgv_Disp.DataSource = query.ToList(); 当我在GUI中有datagridview的表单类上运行这段代码时,一切都很好。datagridview将自动生成列和行数 但是当我运行完全相同的代码时,除了GUI中没有da

只是c#winforms datagridview有一些小问题。这是我的设想

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

var query = from q in context.foo
select q;

dgv_Disp.DataSource = query.ToList();
当我在GUI中有datagridview的表单类上运行这段代码时,一切都很好。datagridview将自动生成列和行数

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

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

我知道这可能很简单,但我就是搞不懂。如果有人能告诉我我做错了什么,那就太好了

编辑


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

创建datagridview对象时,需要设置

dataGridView1.AutoGenerateColumns = true

在将数据源分配给它之前,请确保您已经这样做了。

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

public Form1()
{
初始化组件();
DataGridView gv=新DataGridView();
gv.DataSource=newlist(){“sss”,“aaa”}.Select(x=>new{Name=x}).ToList();
this.Controls.Add(gv);//将gridview添加到当前窗体或面板(或容器),然后只显示它
}

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

        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();

Winforms datagridview仅在其实际上是GUI的一部分时生成列。通过将我的所有DataGridView粘贴到表单设计器中的表单上,DataGridView根据我的需要生成列。我实际上并不需要表单,所以我没有调用show()方法。处理这个问题似乎有点老土,但这就是我如何解决这个问题的方法。我已经很容易地做到了,首先声明了同一个DataTable的一个新变量,然后放入tableAdapter.Fill(dt);然后dbGrid.DataSource=dt


它工作正常

这是windowsForm应用程序吗?我实际上不想显示数据,是否有某种容器可以声明并添加到其中?如果不需要显示数据,不清楚为什么需要DataGridView,您到底想做什么?我在一个表中有一个字符串列表,这些字符串引用另一个表中的列。我想将第二个表绑定到datagridview,这样我就可以通过dgv.rows[0].Cells[index]访问值。如果数据保留在一个直线实体中,则无法使用字符串访问数据。我知道这并不是datagridview的标准用法,但它让我的工作更轻松,哈哈
        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();