Пробел DataGridView после заголовка последнего столбца - PullRequest
6 голосов
/ 30 сентября 2009

Я пытаюсь имитировать то, что делает любое другое табличное представление с элементом управления DataGridView, но, похоже, не могу получить правильные заголовки.

Мне нужен пустой заголовок справа от всех заголовков, который не перемещается и фактически не является заголовком. Есть ли способ нарисовать заголовок по умолчанию вдоль верхней части?

По сути, это моя проблема:

Problem

Ответы [ 4 ]

6 голосов
/ 28 октября 2009

Попробуйте это

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
0 голосов
/ 02 ноября 2009

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 #, однако концепция остается прежней.

0 голосов
/ 28 октября 2009

После добавления всех ваших столбцов, вы можете добавить дополнительный столбец, установите следующие свойства:

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

и вы получите то, что хотите.

0 голосов
/ 30 сентября 2009

Хотя это не отвечает на ваш вопрос, альтернативой может быть установка AutoSizeColumnsMode на Заполнение .

...