如何在DataGridView中获取一个列以自动调整到Combobox的内容?

时间:2016-07-05 17:58:30

标签: c# vb.net winforms datagridview datagridviewcombobox

我在DataGridView中有一个列类型为DataGridViewComboBoxColumn 的列。在这个组合框中,我有几个不同长度的字符串。应用程序设置中的用户可以更改其中一些字符串。它看起来像这样:

screenshot of column

AutoCize选项列(如AllCells)可与DataGridViewTextBoxColumns很好地配合使用。但它们无法按预期使用组合框。

如何设置此列的宽度以适合组合框的内容?

1 个答案:

答案 0 :(得分:1)

您可以使用TextRenderer.MeasureText计算项目的宽度,并将列的宽度设置为项目宽度的最大值。

要更改列的宽度,请使用列的Width属性。要仅更改下拉菜单的宽度,请使用DropDownWidth属性。

c = []
for i, v in enumerate(a):
    mask = True if i in b else False
    c.append(mask)

您可以将上面的代码放在表单的// I suppose your column is at index 0 var c = this.dataGridView1.Columns[0] as DataGridViewComboBoxColumn; c.Width = c.Items.Cast<Object>().Select(x => x.ToString()) .Max(x => TextRenderer.MeasureText(x, c.InheritedStyle.Font, Size.Empty, TextFormatFlags.Default).Width); 事件处理程序中,或者放在您可能想要重置列大小的其他位置。

注意:在上面的示例中,组合框的项目应该是字符串类型。但您可以使用任何类型的项目并提取项目的文本。这里的关键点是使用带有参数的Load

VB版

TextRenderer.MeasureText