удаление пустого серого пространства в сетке данных в c # - PullRequest
13 голосов
/ 23 января 2010

альтернативный текст http://www.freeimagehosting.net/uploads/260c1f6706.jpg

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

Ответы [ 3 ]

11 голосов
/ 23 января 2010

Это можно сделать, вам придется настроить ClientSize при добавлении или удалении строки. Тем не менее, он не скрывает фон полностью, когда появляется вертикальная полоса прокрутки и высота сетки не делится на высоту строки. Добавьте новый класс в ваш проект и вставьте код, показанный ниже. Компиляция. Перетащите новый элемент управления из верхней части панели инструментов на форму.

using System;
using System.Drawing;
using System.Windows.Forms;

class AutoSizeGrid : DataGridView {
  private int gridHeight;
  private bool resizing;
  protected override void OnClientSizeChanged(EventArgs e) {
    if (!resizing) gridHeight = this.ClientSize.Height;
    base.OnClientSizeChanged(e);
  }
  protected override void OnRowsAdded(DataGridViewRowsAddedEventArgs e) {
    setGridHeight();
    base.OnRowsAdded(e);
  }
  protected override void OnRowsRemoved(DataGridViewRowsRemovedEventArgs e) {
    setGridHeight();
    base.OnRowsRemoved(e);
  }
  protected override void OnHandleCreated(EventArgs e) {
    this.BeginInvoke(new MethodInvoker(setGridHeight));
    base.OnHandleCreated(e);
  }
  private void setGridHeight() {
    if (this.DesignMode || this.RowCount > 99) return;
    int height = this.ColumnHeadersHeight + 2;
    if (this.HorizontalScrollBar.Visible) height += SystemInformation.HorizontalScrollBarHeight;
    for (int row = 0; row < this.RowCount; ++row) {
      height = Math.Min(gridHeight, height + this.Rows[row].Height);
      if (height >= gridHeight) break;
    }
    resizing = true;
    this.ClientSize = new Size(this.ClientSize.Width, height);
    resizing = false;
    if (height < gridHeight && this.RowCount > 0) this.FirstDisplayedScrollingRowIndex = 0;
  }
}
9 голосов
/ 23 января 2010

Немного взломать, но вы можете попробовать это:

dataGridView1.BackgroundColor = System.Drawing.SystemColors.Control;

Кстати, это было сообщается как ошибка .

3 голосов
/ 30 ноября 2012

Установите свойство MaxHeight сетки данных. например, MaxHeight="150"

В моем случае я удалил пространство, которое вы показали на приведенной выше сетке, с красной границей.

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