Изменяемые размеры столбцов DataGridView, но размер последнего столбца нельзя изменить больше?

Для c = 0 до гр.Columns.Count - 1
    grd.Columns(c).Resizable = DataGridViewTriState.True
Следующая с

Это позволяет изменять размер всех столбцов в моем DataGridView, КРОМЕ последнего столбца. Зачем? Я ДЕЙСТВИТЕЛЬНО получаю маленький указатель мыши с изменяемым размером... но вы можете сделать столбец МЕНЬШЕ, а не шире.

(Та же проблема, если я пытаюсь установить для всех столбцов Resizable, используя IDE VB.net)

Что я здесь не так делаю? Разве я не могу изменить размер ЛЮБОГО столбца, который я хочу, больше или меньше?

6 ответов

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

Один из вариантов - установить для AutoSizeMode последнего столбца значение "Заполнить", а для других столбцов - другой режим, например "Не установлен". Делая это, вы сделаете так, чтобы при изменении размера правого края второго до последнего столбца левый край последнего столбца автоматически заполнял это пространство.

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

В отличие от других столбцов в середине, которые просто крадут пространство от столбца справа, нет столбца справа от последнего столбца, из которого он мог бы украсть пространство. Поскольку ему некуда деваться, элемент управления просто не позволяет изменить размер последнего столбца.

У меня была та же проблема - я не смог изменить размер последнего столбца в DataGridView (для свойства resizable было установлено значение "True"). Я установил "Режим заполнения" на "Отображаемые ячейки". Когда я изменил этот параметр на "Не установлено", я обычно могу изменить размер последнего столбца.

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

К сожалению, способ DataGridView (DGV) не позволит вам увеличить ширину последнего столбца, если она противоречит ширине самого элемента управления (например, добавлены горизонтальные полосы прокрутки, поскольку столбцы шире, чем элемент управления) . Если общее количество столбцов не было шире элемента управления, вы могли бы расширить этот последний столбец, ПОКА вы не достигнете ширины элемента управления. Итак, как я это решил:

  1. Поместите DGV внутрь панели и закрепите ее, чтобы заполнить.
  2. После загрузки данных в DGV добавьте эту строку кода (изменяя Panel1, если вы ее переименуете)

Panel1.AutoScrollMinSize = New Size(Integer.Parse(grd.Columns.GetColumnsWidth(DataGridViewElementStates.Visible)) + 200, 0)

Я использовал +200, но вы можете делать что хотите. Это сделает минимальную ширину прокрутки панели шире, чем общая ширина столбцов, что позволит вам получить дополнительное пространство для расширения последнего столбца. Это также выгодно, поскольку вам не нужны какие-либо проставки, которые могут испортить ваш DGV.

  1. Если вы хотите охватить все базы, вам также следует добавить ту же строку кода всобытие, поэтому, когда вы меняете размер столбца, размер панели изменяется, поэтому она всегда становится шире. Возможно, вам придется рассмотреть любое другое событие, если вы скрываете/показываете столбцы и т. д.

Пожалуйста, попробуйте, как показано ниже

      grd.Columns(c).AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
grd.Columns(c).AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader
grd.Columns(c).AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
grd.RowsDefaultCellStyle.WrapMode = DataGridViewTriState.True
grd.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders

Почему бы не добавить дополнительный столбец с нулевой шириной, чтобы пользователь мог изменить размер последнего столбца, который вы действительно хотите отобразить? Я знаю, что это немного глупо! Если вам не безразлично, вы можете использовать свойство resizable свойство = false для дополнительной ячейки нулевой длины, чтобы запретить изменение размера. Этот метод не работал должным образом для меня. Обязательное связывание последнего поля с чем-либо, иначе поле перед ним (которое было моим последним столбцом перед добавлением поддельного) не позволило бы изменить размер.

Для меня проблема была вызвана тем, что я изменил свойство AutoSizeMode моего последнего столбца на AllCells (который был DataGridViewTextBoxColumn) по предложению исправления для создания многоколоночного текстового поля. Но это не сработало так, как мне было нужно, поэтому я сделал это по-другому (создав динамическое текстовое поле и поместив его туда, где я хотел, но оставив AutoSizeMode = AllCells.

Когда я устанавливаю AutroSizeMode = NotSet в моем последнем столбце, тогда DataGridView позволяет пользователю изменить размер этого последнего столбца сейчас!

Другие вопросы по тегам