调整Infragistics UltraGrid的大小以完美地适应其内容

时间:2015-11-27 07:27:20

标签: c# winforms grid infragistics ultragrid

如何在代码中调整整个ultragrid控件的大小以仅显示其内容? 没有空格(问题是里面的数据表有时很小)

我有:

-----------------------------
|   |   |    |    blank      |
|   |   |    |               |
|   |   |    |               |
| ------------      blank    |
|                            |
|   blank                    |
|____________________________|

我希望边框紧贴网格。我试过了: a)读取DefaultLayout.Bands(0).GetExtent()〜总是给出相同的数字 b)读取数据源大小/高度,并且〜总是给出相同的数字

我是否需要处理一些更改布局事件?或者这是需要处理的网格属性文件?

2 个答案:

答案 0 :(得分:1)

在任意情况下确定宽度都非常困难,因为网格有很多选项。多个波段,RowLayouts,重叠边框,滚动条,卡片视图等。

在最简单的情况下,使用单个波段,波段上的GetExtent方法应该可以帮助您完成大部分工作。如果它不适合你,那么我的猜测是时间问题。网格异步执行大量度量计算,因此您需要确保网格绘制,以便在尝试使用GetExtent或其他度量之前执行所有计算。

然后你只需要考虑可以通过UIElements完成的滚动条和边框。

    private void AutoSizeGridToContents(Infragistics.Win.UltraWinGrid.UltraGrid ultraGrid)
    {
        UltraGridLayout layout = ultraGrid.DisplayLayout;
        UltraGridBand rootBand = layout.Bands[0];
        int extent = rootBand.GetExtent(BandOrigin.PreRowArea);

        UIElement gridElement = layout.UIElement;
        UIElementBorderStyle borderStyle = gridElement.BorderStyle;
        Border3DSide borderSides = gridElement.BorderSides;
        UIElementBorderWidths borderWidths = DrawUtility.CalculateBorderWidths(borderStyle, borderSides, gridElement);
        extent += borderWidths.Left + borderWidths.Right;

        UIElement scrollbarUIElement = gridElement.GetDescendant(typeof(RowScrollbarUIElement));
        if (null != scrollbarUIElement)
            extent += scrollbarUIElement.Rect.Width;

        ultraGrid.Width = extent;
    }

就像我说的那样,这只能在一个简单的情况下使用一个乐队。

答案 1 :(得分:-1)

您可以使用网格的DisplayLayout的AutoFitStyle属性。使用以下行,将调整所有列的大小,并且不会有空格:

ultraGrid1.DisplayLayout.AutoFitStyle = Infragistics.Win.UltraWinGrid.AutoFitStyle.ResizeAllColumns;

有关此媒体资源的详情,请访问this链接。