C# 设置DataGridView ComboxColumn的下拉列表宽度-WinForms

C# 设置DataGridView ComboxColumn的下拉列表宽度-WinForms,c#,winforms,datagridview,drop-down-menu,datagridcomboboxcolumn,C#,Winforms,Datagridview,Drop Down Menu,Datagridcomboboxcolumn,我有一个datagridview,里面有combobox列。此列是数据绑定的。我想根据列表中最大的项目宽度设置下拉列表的宽度。为了让普通的组合框达到同样的效果,我使用了一种扩展方法,通过查找列表中最大的宽度项来设置组合框的宽度。这是在组合框的下拉事件中完成的 现在在DataGridView组合框列中,我想实现同样的效果。在这种情况下,如何获取下拉事件?请告诉我是否有其他方法可以达到同样的效果?您可以尝试将列的AutoSizeMode设置为allcellsceptheader,或AllCells。

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


现在在DataGridView组合框列中,我想实现同样的效果。在这种情况下,如何获取下拉事件?请告诉我是否有其他方法可以达到同样的效果?

您可以尝试将列的
AutoSizeMode
设置为
allcellsceptheader
,或
AllCells
。如果自动调整列的大小会导致列变得太窄,您也可以设置列的
最小宽度。

经过一点调查,我找到了答案

我正在将数据源设置为datagridview的combobox列。因此,在设置数据源之后,我将为设置为列的DisplayMember的值查找datatable中最大项的宽度。我使用的是在我的问题中上面给出的链接中提到的相同逻辑,而不是在下拉事件中执行,而是在设置数据源时执行,这是一次性的。在上面的链接中,我的问题是设置每次显示下拉列表时下拉列表的宽度。因此,在某种程度上,我的方法看起来不错

在这里,我是如何做到这一点的:

// 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();

@维亚斯:你能告诉我你想要什么代码吗?我希望我的问题很清楚,我想为datagridview中的combobox列设置下拉列表的宽度。您想让我在其中创建datagridview和combobox列的代码吗?或者在普通组合框中设置下拉列表自动大小的代码?我已经固定了列宽。我只想设置下拉列表的宽度。我希望您的解决方案可以改变列的宽度。谢谢。我遇到了完全相同的问题,尽管是在VB.NET应用程序中+1.