Как добавить строку в несвязанный DataGridView? - PullRequest
2 голосов
/ 01 февраля 2012

У меня есть DataGridView в C #, и я хочу добавить строки программным способом . Нет данных, привязанных к сетке, но когда я вызываю dataGrid.Rows.Add();, она выдает System.InvalidOperationException.

Я просмотрел весь интернет и нашел эту проблему только для тех, у кого есть связанные данные. Я хочу, чтобы сетка полностью контролировалась из кода.

Может ли кто-нибудь помочь мне с этим, пожалуйста?

Не уверен, что это что-то меняет, но я использую .Net framework 3.5.

Ответы [ 3 ]

6 голосов
/ 01 февраля 2012

Предполагая, что вы создали столбцы с помощью конструктора или с помощью кода, который вы можете сделать:

var row = (DataGridViewRow)myDataGridView.RowTemplate.Clone();
row.CreateCells(myDataGridView, "I'm Cell 1", "I'm Cell 2", "etc.");
myDataGridView.Rows.Add(row);

В идеале, если вы добавляете много строк, вы должны создать массив строк заранее и вызвать AddRange(rows);вместо.

Пример:

void PopulateGrid()
{
    //Consider Suspend-Resume Layout, YMMV.
    var rows = myData.Select(data => CreateRow(data)).ToArray();
    myDataGridView.Rows.AddRange(rows);
}

DataGridViewRow CreateRow(MyData data)
{
    var row = (DataGridViewRow)myDataGridView.RowTemplate.Clone();
    row.CreateCells(myDataGridView, data.Text, data.Date, date.Value);
    return row;
}
2 голосов
/ 01 февраля 2012

Самый простой пример, который я могу привести:

/// <summary>
/// Shows example usage of Add method on Rows.
/// </summary>
void M()
{
    //
    // n is the new index. The cells must also be accessed by an index.
    // In this example, there are four cells in each row.
    //
    int n = dataGridView1.Rows.Add();

    dataGridView1.Rows[n].Cells[0].Value = title;
    dataGridView1.Rows[n].Cells[1].Value = dateTimeNow;

    //
    // The second cell is a date cell, use typeof(DateTime).
    //
    dataGridView1.Rows[n].Cells[1].ValueType = typeof(DateTime);
    dataGridView1.Rows[n].Cells[2].Value = wordCount;
}
0 голосов
/ 02 февраля 2012

Обычно я иду с ответами, предоставленными другими людьми, но это не так, потому что ответы не очень полезны.

Как я уже сказал, "dataGridView1.Rows.Add ();" выдал исключение и AddRange.
Я узнал ответ после многих проверок. Видимо .Net не нравится, если я добавляю много строк в секунду (около 30).
Я получаю свои строки по сети, поэтому я создал пул строк и каждую секунду я обновлял строки из таблицы данных.
Похоже, это исправило не отображаемые строки и исключения.

Спасибо за вклад в любом случае!

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