C # DataGridView AutoSizeRowsMode Проблема - PullRequest
1 голос
/ 01 мая 2009

У меня есть DataGridView, к которому я добавляю данные программно. У меня AutoSizeRowsMode установлен на AllCells, а WrapMode на RowsDefaultCellStyle установлен на True. Если я добавляю многострочную строку в DataGridView, она хорошо отображается (автоматическое масштабирование строки, чтобы показать несколько строк). Однако, если я скрываю столбец, содержащий многострочные данные (так, чтобы в оставшихся столбцах были только однострочные данные), строка изменяет размер на одну строку, но при повторном показе скрытого столбца строки не изменяются. Если я изменю размер формы, строки будут исправлены.

Следующий код показывает, как я переключаю видимость столбца: tificationDataGridView.Columns [1] .Visible =! messagesDataGridView.Columns [1] .Visible;

Может кто-нибудь помочь мне с тем, как это исправить? Я пробовал каждую комбинацию Invalidate и Refresh, о которой только мог подумать.

Ответы [ 2 ]

2 голосов
/ 16 июля 2009

Я столкнулся с подобной проблемой с неправильным изменением размеров строк. В моем DataGridView я использую событие CellFormatting для записи пользовательских данных в DataGridViewTextBoxColumn, который имеет AutoSizeRowsMode = AllCells и DefaultCellStyle.WrapMode = DataGridViewTriState.True для соответствующего столбца. Я использую \ r \ n в тексте ячейки для этого столбца, чтобы добавить дополнительные строки. После изменения данных, чтобы добавить дополнительную строку в одну из строк, она не изменила размер, поэтому не показала добавленную мной дополнительную строку. Я попробовал вышеуказанный обходной путь, чтобы заставить его перерисовать высоту строки, но это не сработало. Следующий неприятный обходной путь мне помог:

dataGridView.Width++;
dataGridView.Width--;

Странно, но этот хак работал только путем сброса ширины, а не высоты.

1 голос
/ 01 мая 2009

Хорошо, я не знаю, является ли это ошибкой в ​​DataGridView или чем-то еще, но вот взлом, чтобы заставить его работать После звонка:

notificationDataGridView.Columns[1].Visible = !notificationDataGridView.Columns[1].Visible;

добавить эти две строки кода:

notificationDataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.NotSet;
notificationDataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.True;

Не спрашивайте меня, почему, но это похоже на работу. Если у кого-то есть лучшее решение, пожалуйста, отправьте его!

...