【问题标题】:Setting DropDown list width of DataGridView ComboBoxColumn - WinForms设置 DataGridView ComboBoxColumn 的下拉列表宽度 - WinForms
【发布时间】:2011-04-23 18:30:57
【问题描述】:

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

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

【问题讨论】:

  • @Vyas:你能告诉我你想要什么代码吗?我希望我的问题很清楚,我想为 datagridview 中的组合框列设置下拉列表的宽度。你想让我把创建datagridview和combobox列的代码放在里面吗?或者在普通组合框中设置下拉列表自动大小的代码?

标签: c# winforms datagridview drop-down-menu datagridcomboboxcolumn


【解决方案1】:

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

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

【讨论】:

  • 谢谢。我遇到了完全相同的问题,尽管是使用 VB.NET 应用程序。 +1
【解决方案2】:

您可以尝试将列的AutoSizeMode 设置为AllCellsExceptHeader,或AllCells。如果自动调整大小导致它变得太窄,您还可以设置列的MinimumWidth

【讨论】:

  • 我已经固定了列宽。我只想设置下拉列表的宽度。我希望你的解决方案改变了列的宽度。
猜你喜欢
  • 2015-05-21
  • 2013-04-23
  • 1970-01-01
  • 2018-04-15
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
  • 2013-09-06
相关资源
最近更新 更多