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