设置DataGridView ComboBoxColumn的下拉列表宽度-WinForms

JPR*_*ddy 4 c# datagridview datagridcomboboxcolumn winforms drop-down-menu

我有一个带有组合框列的datagridview。此列是数据绑定的。我想根据列表中最大项目的宽度设置下拉列表的宽度。为了使普通组合框达到相同的效果,我使用了一种扩展方法,该方法将通过在列表中找到最大宽度的项来设置组合框的宽度。这是在组合框的DropDown事件中完成的。

现在,我想在DataGridView组合框列中实现相同的效果。在这种情况下,如何获取DropDown事件?如果还有其他方法可以实现这一目标,请让我?

JPR*_*ddy 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();
Run Code Online (Sandbox Code Playgroud)