如何在XtraGrid.GridControl中停靠视图?

时间:2013-05-20 14:21:54

标签: .net vb.net winforms devexpress gridcontrol

我在Winforms项目中有一个DevExpress XtraGrid.GridControl,我正在使用Master / Detail设置,在运行时绑定的数据集中有多个表。网格的可视行为有些不稳定,因为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?感谢您对此问题的任何帮助。

3 个答案:

答案 0 :(得分:0)

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

//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();

答案 1 :(得分:0)

在您的打印屏幕上,您似乎正在一个面板或标签内对接。但是那个面板没有停靠在Form本身,这不是问题吗?

你应该总是这样做:

GridControl1.DockStyle = DockStyle.Fill;

并停靠容器:

Panel1.DockStyle = DockStyle.Fill

答案 2 :(得分:0)

似乎当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

感谢大家的帮助和帮助。