使用数据源和实体框架填充以编程方式声明的datagridview

时间:2013-08-29 06:44:24

标签: 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中没有datagridview之外,我只是以编程方式声明它,然后像上面的代码一样设置数据源。当我这样做时,不会生成任何行或列。

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

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

修改

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

5 个答案:

答案 0 :(得分:2)

您的代码应该有效。下面是将List<T>绑定到DataGridView的示例代码,但您需要将DataGridView添加到表单或其他面板(或容器)

    public Form1()
    {
        InitializeComponent();
        DataGridView gv = new DataGridView();
        gv.DataSource = new List<string>() { "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 
    }

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

dataGridView1.AutoGenerateColumns = true

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

它运作良好