我在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?感谢您对此问题的任何帮助。
答案 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
感谢大家的帮助和帮助。