Краткое знакомство с источником моей проблемы:

У меня есть DataGridView, который является потомком изменяемого размера Panel, который можно настроить с помощью мыши, вводимой пользователем. При изменении размера Panel размер DataGridView зеркально отражается вместе с ним. Идея состоит в том, что вместо автоматического изменения размера столбцов и строк сетки для соответствия содержимому ячеек или пространству сетки количество столбцов и строк будет определяться размером сетки. Ширина и высота строк и столбцов определены заранее и не нуждаются в корректировке. Смысл этого в том, чтобы позволить пользователю быстро настроить количество строк и столбцов. Лучше всего это демонстрирует короткий фрагмент кода в действии: Панель изменения размера

Для этого я проверяю, изменяется ли размер панели, и, в зависимости от того, уменьшается она или растет, столбцы корректируются соответствующим образом. Здесь творится какая-то магия, но по сути это выглядит так:

if(panel_width_is_growing)
{
    if(margin >= growing_threshold)
    {
        DataGridViewColumn column = new DataGridViewColumn();
        column.Name = "Run " + (dataGridView.Columns.Count + 1).ToString();
        column.HeaderText = "Run " + (dataGridView.Columns.Count + 1).ToString();

        dataGridView.Columns.Add(column);
    }
}

if(!panel_width_is_growing)
{
    if(margin <= shrinking_threshold)
    {
        dataGridView.Columns.RemoveAt(dataGridView.Columns.Count - 1);
    }
}

Вот где возникает моя проблема. Я делаю в точности то же самое, добавляя и удаляя строки из сетки, но с настроенными полями и порогами для учета размера строки, а не размера столбца. Единственная разница в том, что я смотрю на высоту панели, а не на ширину:

if(panel_height_is_growing)
{
    if(margin >= row_threshold)
    {
        DataGridViewRow row = new DataGridViewRow();
        row.HeaderCell.Value =  (dataGridView.Rows.Count + 1).ToString();
        dataGridView.Rows.Add(row);              
    }                
}

И строк не появляется ... Я не могу понять, в чем проблема. Код попадает во все необходимые строки, проверяется точками останова и пошаговым выполнением. Свойство RowCount никогда не увеличивается, и не срабатывают сигналы тревоги, поскольку все это заключено в блок try catch. Нет привязки, связанной с сеткой или специальными функциями, которые перегружают поведение по умолчанию.

0
B L 9 Май 2013 в 21:56

1 ответ

Лучший ответ

Проблема была с набором текста (настоящий тупой недосмотр). DataGridViewColumn не имеет шаблона ячейки по умолчанию, поэтому попытка добавить строки в столбец не удалась. Использование DataGridViewTextBoxColumn полностью прояснило это.

0
B L 20 Май 2013 в 01:51