1

我在一个 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?感谢您在此问题上提供的任何帮助。

4

3 回答 3

0

通常,您希望在 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();
于 2013-05-21T07:13:16.653 回答
0

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

你应该总是这样做:

GridControl1.DockStyle = DockStyle.Fill;

并停靠容器:

Panel1.DockStyle = DockStyle.Fill
于 2013-05-21T23:43:09.963 回答
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

谢谢大家的帮助和帮助。

于 2013-05-22T13:23:08.843 回答