如何让 DataGridView 中的列自动调整为 Combobox 的内容?
How can I get a column in a DataGridView to autosize to the contents of a Combobox?
我在 DataGridView 中有一个列类型为 DataGridViewComboBoxColumn 的列。在这个组合框中,我有几个不同长度的字符串。用户可以在应用程序设置中更改其中一些字符串。它看起来像这样:
列自动调整大小选项(例如 AllCells)与 DataGridViewTextBoxColumns 配合得很好。但是它们不能像预期的那样使用组合框。
如何设置此列的宽度以适应组合框的内容?
您可以使用 TextRenderer.MeasureText
计算项目的宽度,并将列宽设置为项目宽度的最大值。
要更改列宽,请使用 Width
property of column. To change only width of dropdown menu, use DropDownWidth
属性。
// 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
事件处理程序中或您可能想要重置列大小的其他地方。
注意:在上面的示例中,组合框的项目应该是字符串类型。但是您可以使用任何类型的项目并提取项目的文本。这里的关键点是使用 TextRenderer.MeasureText
和那个参数。
VB版本
Dim c = DirectCast(Me.DataGridView1.Columns(0), DataGridViewComboBoxColumn)
c.Width = c.Items.Cast(Of Object)().Select(Function(x) x.ToString()) _
.Max(Function(x) TextRenderer.MeasureText(x, c.InheritedStyle.Font, _
Size.Empty, TextFormatFlags.Default).Width)
我在 DataGridView 中有一个列类型为 DataGridViewComboBoxColumn 的列。在这个组合框中,我有几个不同长度的字符串。用户可以在应用程序设置中更改其中一些字符串。它看起来像这样:
列自动调整大小选项(例如 AllCells)与 DataGridViewTextBoxColumns 配合得很好。但是它们不能像预期的那样使用组合框。
如何设置此列的宽度以适应组合框的内容?
您可以使用 TextRenderer.MeasureText
计算项目的宽度,并将列宽设置为项目宽度的最大值。
要更改列宽,请使用 Width
property of column. To change only width of dropdown menu, use DropDownWidth
属性。
// 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
事件处理程序中或您可能想要重置列大小的其他地方。
注意:在上面的示例中,组合框的项目应该是字符串类型。但是您可以使用任何类型的项目并提取项目的文本。这里的关键点是使用 TextRenderer.MeasureText
和那个参数。
VB版本
Dim c = DirectCast(Me.DataGridView1.Columns(0), DataGridViewComboBoxColumn)
c.Width = c.Items.Cast(Of Object)().Select(Function(x) x.ToString()) _
.Max(Function(x) TextRenderer.MeasureText(x, c.InheritedStyle.Font, _
Size.Empty, TextFormatFlags.Default).Width)