与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特定格式的信息,因为在我的实际场景中,我已经拥有了来自先前查询的实体数据。我只是使用上面的代码作为例子。
答案 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;
它运作良好