Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Datagridview的数据源为空_C#_Windows_Datagrid - Fatal编程技术网

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

我正在用如下对象填充datagridview:

        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;