DataGridView最后一列标题后面的空白部分

6
我正在尝试使用DataGridView控件模仿每个表格视图的方式,但似乎无法正确配置标题。
我想在所有标题的右侧添加一个空白标题,该标题不会移动,也不实际存在。是否有一种方法可以沿着顶部绘制默认标题?
基本上,这是我的问题:
[图片]

+1 链接到屏幕截图。我希望更多的人这样做。一张图片胜过千言万语。 - I. J. Kennedy
4个回答

6

试试这个

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

+1,我建议一样。只需添加一个没有HeaderText的列,并将AutoSizeMode设置为Fill即可。 - Bobby

0

在添加所有列之后,您可以添加一个额外的列,并将以下属性设置为:

 AutoSizeMode = Fill;
 HeaderText = ""
 ReadOnly = true;
 SortMode = NotSortable;

针对此特定列,通过处理gridView CellPainting事件来防止边框被绘制:

 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;
     }
 }

你会得到你想要的。


0

在我看来,最好(也是最高效的)的方法是在末尾创建一个额外的列,以允许它“吞掉”(或者说“占据”)其他列中未被占用的空间。实现这一点的方法是将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所解释的那样,您可能希望设置以下属性:

ReadOnly = true;

SortMode = NotSortable;

本质上,您正在创建一个占据空白空间的空白列。
附言:我刚刚注意到surajitkhamrai有一个非常相似的代码示例,但我的是用C#编写的 - 然而,概念保持不变。

0

虽然这并没有回答你的问题,但另一种方法是将AutoSizeColumnsMode设置为Fill


这个确实可以工作,但如果我有很多列(在这种情况下是这样),填充选项就不太好用了。我需要能够滚动。我还尝试将最后一列设置为“填充”,但是那么你必须动态设置最小大小。这仍然不是我见过的大多数表格控件的工作方式。 - Nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接