Источник данных Datagridview является нулевым - PullRequest
0 голосов
/ 22 сентября 2010

Я заполняю сетку данных объектами, подобными этому:

        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++;
        }

Но источник данных сетки остается нулевым.Есть ли другое решение для заполнения сетки или обновления источника данных?

Ответы [ 2 ]

1 голос
/ 22 сентября 2010

Источник данных является нулевым, потому что вы никогда не устанавливаете его.

Вы можете просто установить grid.DataSource = this.Records и полностью пропустить второй цикл foreach.Для этого потребуется также установить DataPropertyName каждого столбца, добавляемого в сетку.

Это может не работать с вашим пользовательским классом NavRecord без некоторых изменений, хотя (не можетскажем наверняка, если только вы не отправите код для этого).

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;

О, и вы можете установить grid.AutoGenerateColumns = false;, иначе каждый столбец может появиться дважды при использовании этого подхода.

0 голосов
/ 22 сентября 2010

Создайте DataTable и привяжите его к DataGrid.

dataGrid.DataSource = dataTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...