我试图模仿所有其他表格视图对 DataGridView 控件所做的事情,但我似乎无法正确获取标题。
我想要所有标题右侧的空白标题,它不会移动,实际上不是标题。有没有办法在顶部绘制默认标题?
基本上,这是我的问题:
我试图模仿所有其他表格视图对 DataGridView 控件所做的事情,但我似乎无法正确获取标题。
我想要所有标题右侧的空白标题,它不会移动,实际上不是标题。有没有办法在顶部绘制默认标题?
基本上,这是我的问题:
试试这个
Dim dt As New DataTable()
dt.Columns.Add("a")
dt.Columns.Add("b")
dt.Rows.Add(dt.NewRow())
dt.Rows.Add(dt.NewRow())
dt.Rows.Add(dt.NewRow())
dt.Rows.Add(dt.NewRow())
dt.Rows.Add(dt.NewRow())
dt.Rows.Add(dt.NewRow())
dt.Columns.Add(" ")
dt.AcceptChanges()
DataGridView1.DataSource = dt
DataGridView1.AutoSize = True
DataGridView1.Columns(2).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
DataGridView1.Columns(2).Resizable = DataGridViewTriState.False
虽然它没有回答您的问题,但另一种方法可能是将 设置AutoSizeColumnsMode
为Fill。
添加所有列后,您可以添加一个额外的列,将以下属性设置为:
AutoSizeMode = Fill;
HeaderText = ""
ReadOnly = true;
SortMode = NotSortable;
,gridView CellPainting event
通过防止绘制边框来处理此特定列的 :
private void dataGridView1_CellPainting(object sender,
DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex > -1 && e.ColumnIndex == dataGridView1.Columns.Count - 1)
{
e.AdvancedBorderStyle.All = DataGridViewAdvancedCellBorderStyle.None;
e.PaintBackground(e.ClipBounds, false);
e.Handled = true;
}
}
你会得到你想要的。
IMO,最好(也是最有效)的方法是在最后创建一个额外的列,以允许它“吃掉”(或“占用”)未被其他列占用的空间。执行此操作的方法是将AutoSizeMode属性设置为Fill。
这是一些示例代码:
DataGridView grid = new DataGridView();
DataTable data = new DataTable();
//add columns, rows, etc. to DataTable data
data.Columns.Add("This is the first column."); data.Rows.Add(data.NewRow());
//etc.
//Add EXTRA column:
data.Columns.Add(""); //blank header
//Save changes
data.AcceptChanges();
//Set datasource
grid.DataSource = data;
现在,您有了网格,还有一个额外的空白列。 我们必须将列设置为正确的属性:
data.Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; //Sets AutoSizeMode to fill, as explained above, for 2nd column
此外,正如 najameddine 解释的那样,您可能需要设置以下属性:
只读=真;
SortMode = NotSortable;
本质上,您正在创建一个占用空白空间的空白列。
PS 我刚刚注意到 surajitkhamrai 有一个非常相似的代码示例,但我的是 C# - 但是,概念保持不变。