C# 将匿名列表绑定到DataGridView的数据源时没有列
我试图将匿名类型的列表绑定到DataGridView,但列和行似乎为空C# 将匿名列表绑定到DataGridView的数据源时没有列,c#,winforms,datagridview,datasource,anonymous-types,C#,Winforms,Datagridview,Datasource,Anonymous Types,我试图将匿名类型的列表绑定到DataGridView,但列和行似乎为空 [TestMethod] public void TestMethod1() { var view = new DataGridView() { DataSource = new[] { new { Foo = 1, Bar = "2" } }}; Assert.AreEqual(2, view.Columns.Count); // fail, count = 0 Assert.AreEqual(1
[TestMethod]
public void TestMethod1()
{
var view = new DataGridView() { DataSource = new[] { new { Foo = 1, Bar = "2" } }};
Assert.AreEqual(2, view.Columns.Count); // fail, count = 0
Assert.AreEqual(1, view.Rows.Count); // fail, count = 0
}
在匿名类型的绑定之后,我找不到很多关于访问列和行的资源。你知道为什么要这样做吗
编辑:
将父级设置为模拟窗体,然后执行以下操作:
[TestMethod]
public void TestMethod1()
{
var view = new DataGridView() { Parent = new Form() , DataSource = new[] { new { Foo = 1, Bar = "2" } }};
Assert.AreEqual(2, view.Columns.Count); // win
Assert.AreEqual(1, view.Rows.Count); // win
}
尝试在
Load
事件处理程序中调用TestMethod1
:
private void Form1_Load(object sender, EventArgs e){
TestMethod1();
}
还要记住,网格没有任何父对象,因此如何渲染它?因此,请尝试为其分配一些父对象:
var view = new DataGridView(){Parent = this};
//...
原因是在加载UI之前,
DataGridView
在一开始就没有呈现。如果我在表单中添加DataGridView,这就是工作。但我不需要或不想将DataGridView添加到表单中。是什么使列和行列表被设置的?@CyrilGandon正如我所说的,如果它没有父对象,它不会被渲染,并且只有当网格有父对象时,列和行才会被渲染。如果不渲染这些列和行,则这些列和行没有任何信息。如果不想显示网格/表格,则应使用一些DataTable
。在没有显示的情况下为网格设置一些数据是没有意义的。哇,这就是重点<代码>变量视图=新DataGridView(){Parent=新表单()}代码>工作!