Это довольно старый вопрос, который был неверно понят ИМХО.То, чего хочет добиться Idsa, - сделать так, чтобы фактическая функция AutoSize
winforms работала с DataGridView.Свойство существует, но оно не действует.
Это означает, что DataGridView должен соответствовать вокруг своего содержимого, а не его содержимое должно соответствовать внутри DataGridView.
Есть много вещей, о которых нужно подумать, чтобы реализовать реализацию AutoSize.Размер DataGridView зависит от множества критериев:
- Размер границы
- Заполнение
- Размер разделителя ячеек
- Высота заголовка строки
- ширина заголовка столбца
- способ заполнения DataGridView (DataBound или вручную)
- ... намного больше
Лучше всего выбрать наборнекоторые критерии, которые соответствуют вашему конкретному сценарию, и напишите что-нибудь, что будет вычислять размер DataGridView для вас.
Вот мой конкретный сценарий в качестве примера:
моя сетка - данныесвязаны.Таким образом, его размер должен меняться каждый раз, когда завершается операция DataBinding.Это условие, которое запускает пересчет размера DataGridView.Поэтому я подключаю его к событию DataBindingComplete
.
моя сетка не должна отображать полосы прокрутки.Поэтому я установил для свойства Scrollbars
значение Нет.
Мой режим авторазмера строки и столбцов установлен на AllCells.
Заголовок Rows and Columnsне видныЕсли это так, их размеры должны быть включены в расчет.
Расширение метода ниже соответствует моим потребностям.Это очень просто, потому что мои сетки очень просты.Вам, вероятно, придется немного настроить его, чтобы он работал так, как вы хотите, и lot , чтобы он работал для всех сценариев DataGridView.
public static void HandleAutoSize(this DataGridView dgv)
{
dgv.DataBindingComplete += (s, e) =>
{
var dg = (DataGridView)s;
var width = dg.Columns.GetColumnsWidth(DataGridViewElementStates.None);
var height = dg.Rows.GetRowsHeight(DataGridViewElementStates.None);
dg.ClientSize = new Size(width, height);
};
}