我试图模仿什么每隔表格视图不与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
来填充 。
将您的所有列后,您可以添加一个额外的列,设置以下属性:
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#中 - 然而,这一概念保持不变。