设置DataGridView ComboBoxColumn的DropDown列表宽度 - WinForms

时间:2010-10-11 11:18:50

标签: c# winforms datagridview drop-down-menu datagridcomboboxcolumn

我正在使用带有combobox列的datagridview。此列是数据绑定的。我想根据列表中最大的项目宽度设置下拉列表的宽度。对于一个普通的组合框来实现相同的我已经使用了一个扩展方法,它将通过查找列表中最大的宽度项来设置组合框的宽度。这是在组合框的DropDown事件中完成的。

现在在DataGridView组合框列中我想实现相同的目标。在这种情况下如何获得DropDown事件?如果有其他方法可以实现同样的目的,请告诉我吗?

2 个答案:

答案 0 :(得分:5)

经过一些调查后,我找到了答案。

我正在将数据源设置为datagridview的组合框列。因此,在设置数据源之后,我找到数据表中最大项的宽度,该值设置为列的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 :(得分:1)

您可以尝试将列的AutoSizeMode设置为AllCellsExceptHeaderAllCells。您也可以设置列的MinimumWidth,如果自动调整大小,会导致列太窄。