C# Datagridview的数据源为空
我正在用如下对象填充datagridview:C# Datagridview的数据源为空,c#,windows,datagrid,C#,Windows,Datagrid,我正在用如下对象填充datagridview: foreach (NavField field in this.Fields) { DataGridViewColumn column = new DataGridViewColumn(); column.HeaderText = field.Caption; column.Name = field.FieldNo.ToString();
foreach (NavField field in this.Fields)
{
DataGridViewColumn column = new DataGridViewColumn();
column.HeaderText = field.Caption;
column.Name = field.FieldNo.ToString();
column.ValueType = field.GetFieldType();
column.CellTemplate = new DataGridViewTextBoxCell();
grid.Columns.Add(column);
}
int count = 0;
foreach (NavRecord record in this.Records)
{
grid.Rows.Add();
foreach (NavItem item in record.items)
{
//Adding the rows
grid.Rows[count].Cells[item.FieldNo.ToString()].Value = item.RecordValue;
}
count++;
}
但是网格的数据源保持为空。是否有其他解决方案来填充网格或更新数据源?创建DataTable并将其绑定到DataGrid
dataGrid.DataSource = dataTable
数据源为空,因为您从未设置它 您可以简单地设置
grid.DataSource=this.Records
并完全跳过第二个foreach循环。这将要求您还设置添加到网格中的每一列的长度
但是,如果不做一些修改,这可能无法与您的自定义NavRecord
类一起工作(除非您也发布了相关代码,否则无法确定)
哦,您可能希望设置为其他方式,否则在使用此方法时,每列可能会出现两次。Grid.Rows和Grid.Columns与DataTable Rows和Columns不同。当您操作网格.行和网格.列时,您只操作布局。如果将数据绑定到DataGrid,则必须将数据设置为Bernhof Sai在第二个循环中,我还需要满足一些其他条件才能添加行(我在问题中没有包括这些条件)。此外,行根据某种条件映射到字段上,而不仅仅是列的索引。对于数据源,我认为我们可以将datagridview推送到数据源。这可能吗?我不确定将datagridview推送到数据源是什么意思-你能详细说明一下吗?如果你说的是通过datasource属性读取插入grid.Rows和grid.Columns中的数据,那么不-这是不可能的。@Bernhof,这就是我想做的。但是,考虑到我的数据在对象中,还有哪些其他数据源替代品可以填充datagridview呢。我尝试创建datatable,它可以工作,但列映射不正确。Datatable有标题,datagridview有headertext。在第二个循环中,我需要满足一些其他条件才能添加行(我在问题中没有包括这些条件)。此外,行根据某种条件映射到字段上,而不仅仅是列的索引。对于数据源,我认为我们可以将datagridview推送到数据源。可能吗?我没有使用datatable,因为datatable在datagridview上没有正确映射。有些东西像headertext,它是datatable中的标题,或者隐藏列,它们的方式不同。
foreach (NavField field in this.Fields)
{
DataGridViewColumn column = new DataGridViewColumn();
column.HeaderText = field.Caption;
column.Name = field.FieldNo.ToString();
column.ValueType = field.GetFieldType();
column.CellTemplate = new DataGridViewTextBoxCell();
// added:
column.DataPropertyName = field.FieldNo.ToString();
grid.Columns.Add(column);
}
grid.DataSource = this.Records;