Автоматическое изменение размера строки Datagridview

Я пытаюсь автоматически настроить высоту строки, и мне это очень сложно.

Я уже установил это свойство:

DataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells.

Я также сделал это, используя другой метод:

DataGridView.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders)

А также построчно, используя это:

DataGridView.AutoResizeRow(i, DataGridViewAutoSizeRowMode.AllCells)

А также даже жестко запрограммировали высоту строки на большое значение, и это тоже не сработало! Все строки отображаются с высотой по умолчанию.

Ни один из них не работал. У меня заканчиваются варианты.

Размер большинства строк в datagridview изменять не нужно. Но один из них заполнен такими значениями:

"a" + "\n" + b + "\n" + "c" + "\n" + "d" + "\n" + "e"

Я имею в виду короткие значения, но в разных строках. Я должен показать их в разных строках, не могу показать их все вместе. Но datagridview показывает только первый, а все остальные скрыты, потому что размер строки не изменяется автоматически.

Любая идея о любом другом способе сделать это.


person monican    schedule 23.11.2012    source источник


Ответы (3)


Вам нужно вызвать метод изменения размера после изменения данных. Из статьи MSDN на DataGridView.AutoResizeRows():

Высота строк корректируется только один раз при вызове метода; если содержимое строк позже изменится, строки не будут корректироваться автоматически.

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

Для первой загрузки с использованием события DataBindingComplete:

dataGridView1.DataBindingComplete += new
    DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells);
}

Для последующих обновлений ячеек вам нужно будет найти лучшее место самостоятельно.

person David Hall    schedule 23.11.2012
comment
Причина, по которой ваш текущий подход не работает, вероятно, заключается в том, что у вас есть код в конструкторе форм или в событии onload. - person David Hall; 23.11.2012
comment
Нет, на самом деле я делаю это после того, как для источника сетки установлено значение datagridview. Он уже заселен. Это последнее, что я делаю. - person monican; 23.11.2012
comment
@ user1062568 когда ты это делаешь? В каком обработчике событий? даже если вы сделаете это после установки источника, этого недостаточно, вы должны сделать это после завершения привязки данных. Если вы установите источник, а затем вызовете изменение размера, например, в конструкторе формы, это не изменит высоту. - person David Hall; 23.11.2012
comment
Я делал это после того, как сетка была готова. На самом деле я добавлял строку за строкой, используя Rows.Add(). Так что привязка не понадобилась. Во всяком случае, я нашел решение, используя другое свойство. Спасибо в любом случае за вашу помощь! - person monican; 23.11.2012


То, что вы пытаетесь, не сработает. Вам нужно установить для AutoSizeMode значение «none», а затем изменить ширину столбца. Это работает еще лучше, если вы установите столбцы вручную, так как я предполагаю, что вы уже знаете, какие столбцы у вас есть.

person WaySoft    schedule 22.03.2018