removing the empty gray space in datagrid in c#

前端 未结 3 1345
清歌不尽
清歌不尽 2020-11-30 12:33

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 upo

3条回答
  •  心在旅途
    2020-11-30 13:01

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

提交回复
热议问题