一、使用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,控件会自动根据单元格内容调整行高,保证所有内容完整的显示在单元格中。