Resize DataGridView
本文关键字:DataGridView Resize | 更新日期: 2023-09-27 18:11:27
我有一个列用来存放复选框。
我的主要问题是当我调用这个函数时:
dataGrid.AutoResizeColumn(0, DataGridViewAutoSizeColumnMode.DisplayedCells);
它也拉伸了复选框列,我希望该列的宽度保持在25。
我该怎么做呢?(只有复选框列未拉伸)
下面是一些代码,展示了我想要发生的事情:
dataGrid.AutoResizeColumn(0, DataGridViewAutoSizeColumnMode.DisplayedCells);
dataGrid.AutoResizeColumn(1, DataGridViewAutoSizeColumnMode.Fill);
dataGrid.AutoResizeColumn(2, DataGridViewAutoSizeColumnMode.Fill);
dataGrid.AutoResizeColumn(3, DataGridViewAutoSizeColumnMode.DisplayedCells);
dataGrid.AutoResizeColumn(4, DataGridViewAutoSizeColumnMode.Fill);
dataGrid.AutoResizeColumn(5, DataGridViewAutoSizeColumnMode.Fill);
但是填充给了我一个错误
你问的不太有意义,因为你显示的方法AutoResizeColumn作为它的第一个参数列索引调整大小-如果你调用这个方法与复选框列的索引,然后你显式地告诉网格调整该列的大小。如果你不想调整大小,不要这样做!
如果你将网格的大小调整模式设置为上一级,你可以这样做:
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
现在用这个方法来设置大小模式,那么是的,复选框会在你想要的时候改变。
答案是使用设计器或您上面提到的方法,并将复选框列自动大小模式设置为None
如果你必须在设置了自动调整大小模式的列上循环,那么你唯一的选择就是检查复选框列是否在循环中,并应用不同的选项
这是对你的评论的回答-你将看到的错误是autoresizecoluml方法抛出的ArgumentException。这在AutoResizeColumn方法的MSDN页面上都有记录。不能指定自动大小模式为None或Fill。
听起来你想做的是:
// If column 3 is the checkbox column, we set its resize mode to none:
dataGridView1.Columns[3].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
// Then we set the width:
dataGridView1.Columns[3].Width = 25;
// Finally we set the rest of the grid to fill or what ever resizing you need:
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
可以在datagridview_cellpainting事件中定义
private void gvDocumentList_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.ColumnIndex == gvDocumentList.Columns["checkbox column name"].Index && e.RowIndex >= 0)
{
e.PaintBackground(e.ClipBounds, true);
Rectangle rectRadioButton = new Rectangle();
rectRadioButton.Width = 14;
rectRadioButton.Height = 14;
rectRadioButton.X = e.CellBounds.X + (e.CellBounds.Width - rectRadioButton.Width) / 2;
rectRadioButton.Y = e.CellBounds.Y + (e.CellBounds.Height - rectRadioButton.Height) / 2;
e.Paint(e.ClipBounds, DataGridViewPaintParts.Focus);
e.Handled = true;
}
}