Настройка ширины списка DropDown для DataGridView ComboBoxColumn - WinForms - PullRequest
4 голосов
/ 11 октября 2010

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

Теперь в столбце выпадающего списка DataGridView я хочу добиться того же.Как я могу получить событие DropDown в этом случае?Пожалуйста, позвольте мне, если есть какой-либо другой способ добиться того же?

Ответы [ 2 ]

5 голосов
/ 11 октября 2010

После небольшого исследования я нашел ответ на этот вопрос.

Я устанавливаю источник данных в столбец со списком со списком данных.Итак, после установки источника данных я нахожу ширину самого большого элемента в таблице данных для значения, которое установлено как DisplayMember столбца.Я использую ту же логику, упомянутую в ссылке, приведенной выше в моем вопросе, вместо того, чтобы делать это на событии DropDown, я делаю это при установке источника данных, который является одноразовым.В приведенной выше ссылке на мой вопрос была указана ширина раскрывающегося списка каждый раз, когда отображается раскрывающийся список.Таким образом, мой подход выглядит хорошо.

Вот как я это сделал:

// This line is picked up from designer file for reference
  DataGridViewComboBoxColumn CustomerColumn; 

  DataTable _customersDataTable = GetCustomers();

  CustomerColumn.DataSource = _customersDataTable;
  CustomerColumn.DisplayMember = Customer_Name;
  CustomerColumn.ValueMember = ID;

  var graphics = CreateGraphics();

  // Set width of the drop down list based on the largest item in the list
  CustomerColumn.DropDownWidth = (from width in
                         (from DataRow item in _customersDataTable.Rows
                          select Convert.ToInt32(graphics.MeasureString(item[Customer_Name].ToString(), Font).Width))
                       select width).Max();
1 голос
/ 11 октября 2010

Вы можете попробовать установить AutoSizeMode столбца на AllCellsExceptHeader или AllCells. Вы также можете установить MinimumWidth столбца, если из-за его автоматического изменения он становится слишком узким.

...