我正在为 WinForms 使用 BandedGridView。而且我只在运行时获得有关 BandedGridView 结构(带和列的数量)的信息。所以我必须手动填写。我可以正确地创建完整的结构,但我不明白如何用数据填充它。我尝试以两种方式做到这一点:
1.使用 GridControl.DataSource 属性。但是在这里我有问题,因为我有动态的列数,所以我无法创建代表 GridViewRow 的静态类,其中类属性将代表列字段。我只有这种形式的数据:List(代表每一行),在 OuterClass 里面我有 List 类型的属性(代表 GridView 中的每一列)。我尝试创建代表整行的动态对象并将其设置为 GridControl.DataSource 属性 BindingList,但这次它在绑定时触发 NullReferenceException。堆栈跟踪的顶部是:
DevExpress.XtraGrid.Views.Grid.GridView.GetRowCellRepositoryItem(Int32 rowHandle, GridColumn column) 中的 DevExpress.XtraGrid.Views.Grid.GridView.GetRowCellRepositoryItem(Int32 rowHandle, GridColumn column) 中的 DevExpress.XtraGrid.Columns.GridColumn.get_ColumnType() .Views.Grid.ViewInfo.GridViewInfo.CreateCellInfo(GridDataRowInfo ri, GridColumnInfoArgs columnInfo) 在 DevExpress.XtraGrid.Views.Grid.ViewInfo.GridViewInfo.CalcRowCellsDrawInfo(GridDataRowInfo ri, GridColumnsInfo columnsInfo) 在 DevExpress.XtraGrid.Views.Grid.ViewInfo.GridViewInfo .CalcDataRow(GridDataRowInfo ri, GridRow row, GridRow nextRow) 在 DevExpress.XtraGrid.Views.Grid.ViewInfo.GridViewInfo.CalcRowsDrawInfo() 在 DevExpress.XtraGrid.Views.Grid.ViewInfo.GridViewInfo.CalcGridInfo()
但我默认保留所有列类型,并用 typeof(string) 的值填充列。我检查每列的 FieldName 并检查我的动态对象的相同属性名称 - 它等于。
2.所以我尝试另一种方式。尝试使用 AddNewRow() 和 SetRowCellValue() 方法手动填充我的网格视图。但是现在当我不填充 GridControl.DataSource 属性,而只是调用 AddNewRow() - 我的网格视图没有任何变化。我看不到网格中的行。当我检查 GridView.FocusedRowHandle 时,它返回负值,因此我了解新行没有添加到我的视图中。
所以我需要帮助,如何在我的情况下填充 BandedGridView?