如何使用动态带数和列数为DevExpress BandedGridView正确设置DataSource

时间:2013-04-19 12:06:40

标签: c# gridview devexpress

我正在使用BandedGridView for WinForms。我只在运行时获得有关BandedGridView结构(波段数和列数)的信息。 所以我必须手动填写它。我可以正确地创建完整的结构,但我无法理解如何用数据填充它。我试着用两种方式做到这一点:

1.使用GridControl.DataSource属性。但这里我有问题,因为我有动态的列数,所以我不能创建静态类,它将表示GridViewRow,其中类属性将表示列字段。我只有这种形式的数据:List(代表每一行)和OuterClass内部我有类型List的属性(表示GridView中的每个列)。 我尝试创建表示完整行的动态对象并设置为GridControl.DataSource属性BindingList但这次它在绑定时触发NullReferenceException。堆栈顶部跟踪是:

  

DevExpress.XtraGrid.Columns.GridColumn.get_ColumnType()in   DevExpress.XtraGrid.Views.Base.ColumnView.GetColumnDefaultRepositoryItem(的GridColumn   专栏)   DevExpress.XtraGrid.Views.Grid.GridView.GetRowCellRepositoryItem(的Int32   rowHandle,GridColumn列)   DevExpress.XtraGrid.Views.Grid.ViewInfo.GridViewInfo.CreateCellInfo(GridDataRowInfo   ri,GridColumnInfoArgs columnInfo)in   DevExpress.XtraGrid.Views.Grid.ViewInfo.GridViewInfo.CalcRowCellsDrawInfo(GridDataRowInfo   ri,GridColumnsInfo columnsInfo)in   DevExpress.XtraGrid.Views.Grid.ViewInfo.GridViewInfo.CalcDataRow(GridDataRowInfo   ri,GridRow row,GridRow nextRow)in   DevExpress.XtraGrid.Views.Grid.ViewInfo.GridViewInfo.CalcRowsDrawInfo()   在DevExpress.XtraGrid.Views.Grid.ViewInfo.GridViewInfo.CalcGridInfo()

但是我默认保留所有列类型,并使用typeof(string)填充列。我检查每列的FieldName并检查我的动态对象的相同属性名称 - 它等于。

2.所以我尝试另一种方式。尝试使用AddNewRow()和SetRowCellValue()方法手动填充我的gridview。但是现在当我没有填充GridControl.DataSource属性,只是调用AddNewRow()时 - 我的gridview没有变化。我看不到网格中的行。当我检查GridView.FocusedRowHandle时,它返回负值,因此我理解新行没有添加到我的视图中。

所以我需要帮助,如何在我的情况下填写BandedGridView?

1 个答案:

答案 0 :(得分:2)

我找到了解决方案。当manuly生成乐队和专栏时,我犯了一个错误。我已将列附加到band列集合,但未将其附加到bandedgridview列集合。所以,当我解决这个问题时,数据源会成功填充。