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

4
我有一个带有组合框列的数据网格视图。这一列是数据绑定的。我想根据列表中最大项的宽度设置下拉列表的宽度。对于普通的组合框,我使用了一个扩展方法来实现相同的效果,该方法会在组合框的DropDown事件中查找最宽的项并设置组合框的宽度。
现在,在DataGridView组合框列中,我想实现相同的效果。我该如何获取DropDown事件呢?如果有其他方法可以实现相同的效果,请告诉我。

@Vyas: 你能告诉我这里需要哪段代码吗?我的问题很清楚,我想在 datagridview 的 combobox 列中设置下拉列表的宽度。你想让我放置创建 datagridview 和 combobox 列的代码吗?或者是设置普通 combo box 下拉列表自动大小的代码? - JPReddy
3个回答

6
经过一番调查,我找到了这个问题的答案。我将数据源设置为 datagridview 的下拉框列。因此,在设置数据源后,我会查找数据表中以 DisplayMember 列的值作为依据的最大项的宽度。我使用了与我在问题中提到的链接中相同的逻辑,只是不是在下拉事件中进行,而是在设置数据源时进行,这是一次性的操作。在我提出的问题中,链接中每次显示下拉列表时都会设置下拉列表的宽度。所以,从某种意义上说,我的方法看起来更好。
以下是我是如何做到这一点的:
// 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
谢谢。我也遇到了完全相同的问题,虽然是在VB.NET应用程序中。+1 - Mike

1

您可以尝试将列的AutoSizeMode设置为AllCellsExceptHeaderAllCells。如果自动调整大小使其变得太窄,您还可以设置列的MinimumWidth


我已经固定了列宽。我只想设置下拉列表的宽度。希望你的解决方案可以改变列的宽度。 - JPReddy

0

您只需要设置DataGridView列的DropDownWith属性:

this.myColumnDataGridViewComboBoxColumn.DropDownWidth = 变量;

对于变量,您可以使用SQL查询来获取表中该列的较大尺寸。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接