【问题标题】:How to dock a view inside of a XtraGrid.GridControl?如何将视图停靠在 XtraGrid.GridControl 内?
【发布时间】:2013-05-15 03:14:25
【问题描述】:

我在 Winforms 项目中有一个 DevExpress XtraGrid.GridControl,我正在使用该项目的主/详细信息设置,其中包含在运行时绑定的数据集中的多个表。网格的视觉行为有些不稳定,因为在 GridControl 中可见网格部分的底部有一个可拖动的条,当数据大小发生变化时,它不会扩展到控件的大小。

在我的实现中,GridControl 被停靠以填充它所占据的标签页,并且这个单一异常可以按预期工作。然而,网格本身只使用了表单上可用可见区域的一半。这是一个问题,因为数据在行和详细信息行的全屏上,但用户必须通过将大小栏拖动到屏幕底部来手动调整视图大小。

我在注册每个视图时手动展开它们,但即使我不自动执行此操作并允许用户通过单击加号来展开它们,此问题仍然存在。这是以编程方式扩展视图的代码部分:

For x As Integer = 0 to v.RowCount - 1
  For y as integer = 0 to v.GetRelationCount(x) - 1
    v.ExpandMasterRow(x, y)
  Next
Next

我一直在寻找一种将 GridView 对象设置为“停靠”在 GridControl 内的方法,但还没有找到方法。有没有办法让数据自动填充 GridControl/View?感谢您在此问题上提供的任何帮助。

【问题讨论】:

  • 如果你能放一些打印屏幕会有所帮助,也许我可以帮忙
  • 我已将调整网格大小前后的网格图像上传到以下 URL:link
  • 我有一些额外的信息。当数据集的最顶层表中有额外的行时,网格会显示更多行。例如,如果我的父表有 1 行,那么网格将显示 50%,但如果有两行,则它显示全屏的高度。似乎即使有很多子行要填满屏幕,网格也会根据父行数调整自己的大小。

标签: .net vb.net winforms devexpress gridcontrol


【解决方案1】:

似乎XtraGrid在创建子视图时忽略了父视图的DetailHeight,而倾向于子视图的DetailHeight。在注册时设置视图的 DetailHeight 可以解决问题。

Private Sub grdMaster_ViewRegistered(sender As System.Object, e As DevExpress.XtraGrid.ViewOperationEventArgs) Handles grdMaster.ViewRegistered
  Try
    Select Case e.View.GetViewCaption()
      Case "parent_child"
        Dim view As Grid.GridView = e.View
        view.DetailHeight = 10000
    End Select
  Catch ex As Exception
    'handle error.
  End Try
End Sub

感谢大家的帮助和帮助。

【讨论】:

    【解决方案2】:

    通过您的打印屏幕,您似乎将所有内容都停靠在一个面板或选项卡中。但是那个面板并没有停靠在表单本身,这不是问题吗?

    你应该总是这样做:

    GridControl1.DockStyle = DockStyle.Fill;
    

    并且还停靠容器:

    Panel1.DockStyle = DockStyle.Fill
    

    【讨论】:

    • 表单上有一个选项卡控件,它有一个用于此网格的选项卡页。页面本质上是面板,并随着表单适当地扩展和收缩。网格停靠在页面内,并且可以适当地扩展和收缩。您在屏幕截图中看到的线位于 XtraGrid 控件内部,并且可以在控件范围内移动。视图是在控件空间内生成的,因此我无法停靠。
    • 老实说,很难帮助您解决这样一个特定问题,如果您可以用更简单的代码复制它,然后使用我们可以复制的示例的 Designer 代码编辑您的 questino,然后真正理解这个问题,这对我来说仍然不清楚。我只是想帮忙:)
    【解决方案3】:

    通常,您希望在 GridControl 中显示的每个 DataTable 都有一个 GridView,但是当您在运行时执行所有操作时,您需要为每个要显示的数据源/DataTable 初始化相同的 Gridview。

    //GridView view;
    view.PopulateColumns();
    view.OptionsView.ColumnAutoWidth = true;
    view.BestFitMaxRowCount = 10000;   // or less ? depends on your data vs preformance
    view.BestFitColumns();
    // you may want to limit some of the columns width
    foreach (GridColumn item in view.Columns)
    {
        item.Width = (item.Width > 1000) ? 1000 : item.Width;
    }
    //GridControl ctrl;    // if you do this in form load you  need to do a force initialize afterwards.
    ctrl.ForceInitialize();
    

    【讨论】:

    • 感谢您的帮助,但是我已经根据需要生成并附加了视图。网格只是没有正确扩展其内部大小以匹配其外部边界。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多