Удаление пустого серого пространства в datagrid в С#

alt text http://www.freeimagehosting.net/uploads/260c1f6706.jpg

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

Ответ 1

Немного взлома, но вы можете попробовать следующее:

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

Btw это сообщается как ошибка.

Ответ 2

Это можно сделать, вам придется настроить 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;
  }
}

Ответ 3

Задайте свойство MaxHeight для datagrid. например, MaxHeight="150"

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