DevExpress GridControl 自动适应高度,也就是根据行数量自动调节GridControl高度
1、获取行高,运行时无法通过gridview.RowHeight获取,此值为-1
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
...
GridViewInfo vi = gridView1.GetViewInfo() as GridViewInfo;
GridRowInfo ri = vi.RowsInfo.FindRow(10);
int height = 0;
if (ri != null)
height = ri.Bounds.Height;
2、另一种方法
using DevExpress.XtraEditors;
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
using DevExpress.XtraGrid.Columns;
using System.Reflection;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Scrolling;
using DevExpress.XtraGrid.Views.Base;
private const int GridMinWidth = 400;
private const int GridMinHeight = 200;
private void UpdateGridSize() {
GridViewInfo viewInfo = (GridViewInfo)gridView1.GetViewInfo();
FieldInfo fi = typeof(GridView).GetField("scrollInfo", BindingFlags.Instance | BindingFlags.NonPublic);
ScrollInfo scrollInfo = (ScrollInfo)fi.GetValue(gridView1);
int width = viewInfo.ViewRects.IndicatorWidth;
foreach (GridColumn column in gridView1.VisibleColumns) {
if (viewInfo.GetColumnLeftCoord(column) < viewInfo.ViewRects.ColumnPanelWidth)
gridView1.LeftCoord = width;
width += viewInfo.ColumnsInfo[column].Bounds.Width;
}
if (scrollInfo.VScrollVisible) width += scrollInfo.VScrollSize;
int height = viewInfo.CalcRealViewHeight(new Rectangle(0, 0, ClientSize.Width, ClientSize.Height), true);
if (scrollInfo.HScrollVisible) height += scrollInfo.HScrollSize;
width = Math.Max(GridMinWidth, width);
width = Math.Min(ClientSize.Width - gridControl1.Location.X, width);
height = Math.Max(GridMinHeight, height);
height = Math.Min(ClientSize.Height - gridControl1.Location.Y, height);
gridControl1.Size = new Size(width, height);
gridView1.LayoutChanged();
}