最后一列标题后的DataGridView空格

时间:2009-09-30 19:04:47

标签: .net datagridview header paint

我试图模仿每个其他表格视图对DataGridView控件的作用,但我似乎无法使标题正确。

我想在所有标题的右侧显示一个空白标题,它不会移动,实际上并不是标题。有没有办法在顶部绘制默认标题?

基本上,这是我的问题:

Problem

4 个答案:

答案 0 :(得分: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 :(得分:0)

虽然它没有回答您的问题,但另一种方法是将AutoSizeColumnsMode设置为填充

答案 2 :(得分:0)

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

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

你会得到你想要的东西。

答案 3 :(得分:0)

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所解释的那样,您可能需要设置以下属性:

  

ReadOnly = true;

     

SortMode =   NotSortable;

基本上,您正在创建一个占据空白区域的空白列。

P.S。我只是注意到surajitkhamrai有一个非常相似的代码示例,但我的是C# - 但是,这个概念保持不变。