他のすべての表形式のビューが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 が説明したように、次のプロパティを設定することもできます。
読み取り専用 = true;
SortMode = NotSortable;
基本的に、空のスペースを占める空白の列を作成しています。
PS surajitkhamrai には非常によく似たコード サンプルがあることに気付きましたが、私のコードは C# です。ただし、概念は同じままです。