Краткое знакомство с источником моей проблемы:
У меня есть 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. Нет привязки, связанной с сеткой или специальными функциями, которые перегружают поведение по умолчанию.
1 ответ
Проблема была с набором текста (настоящий тупой недосмотр). DataGridViewColumn
не имеет шаблона ячейки по умолчанию, поэтому попытка добавить строки в столбец не удалась. Использование DataGridViewTextBoxColumn
полностью прояснило это.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.