一、使用AutoSizeColumnsMode属性自适应列宽
DataGridView控件提供了AutoSizeColumnsMode
属性,用于设置列的自适应模式,包括:
None
:不自适应,列宽为默认宽度AllCells
:根据单元格内容自适应列宽,包括列头单元格和数据单元格AllCellsExceptHeader
:根据数据单元格内容自适应列宽,不包括列头单元格ColumnHeader
:根据列头单元格内容自适应列宽Fill
:均分控件可用宽度,填满整个控件 例如,如果我们将AutoSizeColumnsMode
属性设置为AllCells
,DataGridView控件会根据单元格内容自适应列宽。这样,在用户输入或者添加新的数据时,列宽会自动调整,保证所有数据都能够完整的显示在单元格中。代码示例:
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
二、使用AutoResizeColumns方法手动调整列宽
AutoSizeColumnsMode
属性仅适用于列的自适应模式。如果我们需要手动调整一列或多列的宽度,可以使用AutoResizeColumns
方法。该方法接受一个DataGridViewAutoSizeColumnsMode
枚举值作为参数,指定需要调整的列的自适应模式。代码示例:
// 自适应所有列
dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
// 自适应指定列
dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCellsExceptHeader, DataGridViewAutoSizeColumnMode.ColumnHeader);
在上述代码中,第一行代码会自适应所有列,第二行代码则会自适应除列头单元格外的所有数据单元格。
三、使用ColumnHeaderMouseDoubleClick事件手动调整列宽
如果我们需要进一步的手动调整列宽,可以使用ColumnHeaderMouseDoubleClick
事件。该事件在用户双击列头单元格时触发,我们可以编写事件处理方法计算列宽并进行调整。代码示例:
private void dataGridView1_ColumnHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
DataGridView gridView = sender as DataGridView;
if (gridView != null && e.Button == MouseButtons.Left)
{
DataGridViewColumn clickedColumn = gridView.Columns[e.ColumnIndex];
int paddingWidth = gridView.RowHeadersVisible ? gridView.RowHeadersWidth : 0;
clickedColumn.Width = clickedColumn.GetPreferredWidth(DataGridViewAutoSizeColumnMode.AllCells, true) + paddingWidth;
}
}
上述代码中,我们首先获取DataGridView控件和用户双击的列。然后,我们计算出列的最佳宽度,并加上行头的宽度。实际上,GetPreferredWidth
方法返回的是列的“期望”宽度,但由于这个方法考虑了单元格内容的特殊情况,所以可以保证列宽恰到好处。
四、使用DefaultCellStyle.WrapMode属性自动换行单元格内容
以上三种方法可以让DataGridView列宽自适应,但如果单元格内容过长,可能会导致单元格显示不完整。为了解决这个问题,我们可以使用DefaultCellStyle.WrapMode
属性来自动换行单元格内容,并调整行高使所有内容都能够完整的显示。代码示例:
dataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
上述代码中,我们将DefaultCellStyle.WrapMode
属性设置为True
,表示自动换行单元格内容。然后设置AutoSizeRowsMode
属性为AllCells
,控件会自动根据单元格内容调整行高,保证所有内容完整的显示在单元格中。