Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

removing the empty gray space in datagrid in c#

Tags:

c#

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

how do i remove the empty space i.e. i want the datagrid to automatically resize itself depending upon the no. of rows. i know for columns we can do that by using fill value in AutoSizeColumnMode, but there is no fill value for AutoSizeRowsMode.

like image 417
Pratik Gandhi Avatar asked Jan 23 '10 11:01

Pratik Gandhi


2 Answers

It can be done, you'd have to adjust the ClientSize when a row is added or removed. However, it doesn't hide the background completely once the vertical scrollbar appears and the grid height is not a divisble by the row height. Add a new class to your project and paste the code shown below. Compile. Drop the new control from the top of the toolbox onto your form.

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;
  }
}
like image 190
Hans Passant Avatar answered Sep 28 '22 21:09

Hans Passant


A bit of a hack but you may try this:

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

Btw this has been reported as a bug.

like image 40
Darin Dimitrov Avatar answered Sep 28 '22 21:09

Darin Dimitrov