подгонять размер dataGridView к общему размеру строк и столбцов - PullRequest
12 голосов
/ 14 сентября 2011

Я хочу, чтобы размер dataGridView соответствовал общему размеру столбцов и строк.Что касается общей высоты, мне удалось подобрать ее к высоте столбцов следующим образом:

const int datagridLines = 30;
s.Height = dataGridView2.Columns[0].HeaderCell.Size.Height;
for (byte i = 0; i < datagridLines; i++)
{
  dataGridView2.Rows.Add();
  s.Height += dataGridView2.Rows[i].Height;
}
dataGridView2.ClientSize = s;

Я пробовал некоторые вещи, чтобы соответствовать ширине, но не повезло.Есть предложения?

Спасибо.

Ответы [ 5 ]

18 голосов
/ 14 сентября 2011

Это должно работать:

int height = 0;
foreach (DataGridViewRow row in dataGridView1.Rows) {
    height += row.Height;
}
height += dataGridView1.ColumnHeadersHeight;

int width = 0;
foreach (DataGridViewColumn col in dataGridView1.Columns) {
    width += col.Width;
}
width += dataGridView1.RowHeadersWidth;

dataGridView1.ClientSize = new Size(width + 2, height + 2);

Значения от + 2 до width и height представляют собой коэффициент выдумки, учитывающий ширину внутренних элементов DataGridView. Я помню, как где-то видел код, который позволит вам получить это значение без жестко закодированных чисел, но сейчас я не могу его найти.

9 голосов
/ 17 сентября 2012

Методы GetRowsHeight и GetColumnsWidth коллекций Rows и Columns должны дать вам то, что вам нужно, без особых усилий:

var totalHeight = dataGridView2.Rows.GetRowsHeight(DataGridViewElementStates.None);
var totalWidth = dataGridView2.Columns.GetColumnsWidth(DataGridViewElementStates.None);
7 голосов
/ 14 января 2014

Чуть более полная версия:

dataGridView.Height = dataGridView.Rows.GetRowsHeight(DataGridViewElementStates.None) + dataGridView.ColumnHeadersHeight + 2;

dataGridView.Width = dataGridView.Columns.GetColumnsWidth(DataGridViewElementStates.None) + dataGridView.RowHeadersWidth + 2;
0 голосов
/ 29 ноября 2017

Это немного поздно и в Visual Basic, но это сработало для меня, если кто-то еще найдет эту тему.Я использую закрепленное представление данных в tableLayoutPanel, которое автоматически изменяет размер при изменении размера формы.Это не уменьшает форму.Я просто начинаю с малого.Строки могут быть добавлены с использованием той же техники.

Private Sub setFormWidth()
        Dim iTotalWidth As Integer = 0 '884
        Dim iDisplayedWidth As Integer = 0
        Dim r As Rectangle
        For Each c As DataGridViewColumn In dgv_EmpList.Columns
            If c.Visible Then
                iTotalWidth += c.Width
                r = dgv_EmpList.GetColumnDisplayRectangle(c.Index, True)
                iDisplayedWidth += r.Width
            End If
        Next
        Me.Width += (iTotalWidth - iDisplayedWidth)
    End Sub
0 голосов
/ 14 сентября 2011

Для этого вам нужно будет использовать свойства коллекции DataGridViewRow и DataGridViewColumn.

Попробуйте подход, аналогичный тому, который используется в этом:

как увеличить размер строк в DataGridView

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...