3

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

现在在DataGridView combobox列中我想实现相同。在这种情况下如何获得DropDown事件?如果还有其他方法可以实现,请让我知道吗?

+0

请添加您的代码在这里 – 2010-10-11 11:50:26

+0

@Vyas:你能告诉我你想要的这里的代码?我希望我清楚我的问题,我想为datagridview中的combobox列设置下拉列表的宽度。你想让我创建datagridview和combobox列的代码吗?或者在普通组合框中设置下拉列表的自动大小的代码? – JPReddy 2010-10-11 12:21:27

回答

4

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

我将数据源设置为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

谢谢你。尽管使用了VB.NET应用程序,但我遇到了完全相同的问题。 +1 – Mike 2011-01-19 10:47:58

1

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

+0

我已经修复了列宽。我只想设置下拉列表的宽度。我希望你的解决方案改变列的宽度。 – JPReddy 2010-10-11 13:21:53