Blog信息 |
blog名称:注册会计师(注会)练习软件 日志总数:398 评论数量:116 留言数量:27 访问次数:3273648 建立时间:2005年6月6日 |

| |
[borland eco 技术]ECO数据在GRIDCONTROL中的动态加列显示 软件技术
吕向阳 发表于 2008/2/26 8:39:11 |
下面代码解决了三个问题,主要目的是动态建立数据列,并在XTRAGIRD(GRIDCONTROL)中动态加相应显示列,并不显示0值(不显示零值)
procedure formcxbmin.getdatacolumn;type TArrayOfBorland_Eco_Handles_OclVariable = array of Borland.Eco.Handles.OclVariable; TArrayOfSystem_Windows_Forms_MenuItem = array of System.Windows.Forms.MenuItem; TArrayOfDevExpress_XtraGrid_Views_Base_BaseView = array of DevExpress.XtraGrid.Views.Base.BaseView; TArrayOfDevExpress_XtraGrid_Columns_GridColumn = array of DevExpress.XtraGrid.Columns.GridColumn; TArrayOfDevExpress_XtraGrid_GridSummaryItem = array of DevExpress.XtraGrid.GridSummaryItem; TArrayOfBorland_Eco_Handles_AbstractColumn = array of Borland.Eco.Handles.AbstractColumn; TArrayOfDevExpress_XtraGrid_Columns_GridColumnSortInfo = array of DevExpress.XtraGrid.Columns.GridColumnSortInfo; TArrayOfDevExpress_XtraGrid_Views_BandedGrid_GridBand = array of DevExpress.XtraGrid.Views.BandedGrid.GridBand; TArrayOfDevExpress_XtraGrid_Views_BandedGrid_BandedGridColumn = array of DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn; TArrayOfDevExpress_XtraGrid_StyleFormatCondition = array of DevExpress.XtraGrid.StyleFormatCondition;var colxx: array of DevExpress.XtraGrid.Columns.GridColumn; OclColumnyy: array of Borland.Eco.Handles.OclColumn; StyleFormatConditionxx: array of DevExpress.XtraGrid.StyleFormatCondition; list1: ielementcollection; I: Integer; strname: string;begin list1 := fecospace.OclService.Evaluate('bm.allinstances.name').GetAsCollection; setlength(colxx, list1.Count * 2); setlength(OclColumnyy, list1.count * 2); setlength(StyleFormatConditionxx, list1.count * 2);
for I := 0 to List1.Count - 1 do begin
//以下代码动态建立OCLPSHANDLE中的列,用EXPRESSIONHANDLE不好处理列数据源变化后的数据刷新,用oclpshandle可方便用OCLPSHANDLE的EXECUTE方法进行数据刷新 strname := string(list1[i].AsObject); OclColumnyy[2 * i] := Borland.Eco.Handles.OclColumn.Create; OclColumnyy[2 * i].Expression := ' self.buymxs->select(p|(p.paperlx=''4'') and (p.buy.bm.name=''' + strname + ''') and ' + getsjstr() + ').quantity->sum'; OclColumnyy[2 * i].Name := 'oclmy' + convert.ToString(2 * i); Self.ohbm.Columns.AddRange(TArrayOfBorland_Eco_Handles_AbstractColumn.Create(OclColumnyy[2 * i]));
//以下代码增加gridcontrol的列 ,以显示上面oclpshandle中动态增加的列内容
colxx[2 * i] := DevExpress.XtraGrid.Columns.GridColumn.Create; colxx[2 * i].Caption := strname + '数量'; colxx[2 * i].FieldName := 'oclmy' + convert.ToString(2 * i); colxx[2 * i].Name := 'colmy' + convert.ToString(2 * i); colxx[2 * i].OptionsColumn.AllowEdit := False; colxx[2 * i].OptionsColumn.AllowSort := DevExpress.Utils.DefaultBoolean.True; colxx[2 * i].OptionsColumn.ReadOnly := True; colxx[2 * i].Visible := True; colxx[2 * i].VisibleIndex := 6 + 2 * i; colxx[2 * i].Width := 90; colxx[2 * i].DisplayFormat.FormatString := '{0:n2}'; colxx[2 * i].DisplayFormat.FormatType := DevExpress.Utils.FormatType.Numeric; colxx[2 * i].SummaryItem.DisplayFormat := '{0:n2}'; colxx[2 * i].SummaryItem.SummaryType := DevExpress.Data.SummaryItemType.Sum;//下两行代码为该列进行底部求和处理 Self.GridView1.Columns.AddRange(TArrayOfDevExpress_XtraGrid_Columns_GridColumn.Create(colxx[2 * i])); Self.GridView1.GroupSummary.AddRange(TArrayOfDevExpress_XtraGrid_GridSummaryItem.Create(DevExpress.XtraGrid.GridGroupSummaryItem.Create(DevExpress.Data.SummaryItemType.Sum, 'oclmy' + convert.ToString(2 * i), colxx[2 * i], '{0:n2}')));
//以下代码为每个XTRAGRID的列增加不显示零值的处理,主要思路是满足列的值为零时,将前景色与背景色设为一致
StyleFormatConditionxx[2 * i]:= DevExpress.XtraGrid.StyleFormatCondition.Create; StyleFormatConditionxx[2 * i].Appearance.ForeColor := System.Drawing.Color.White; StyleFormatConditionxx[2 * i].Appearance.Options.UseForeColor := True; StyleFormatConditionxx[2 * i].Column := colxx[2 * i]; StyleFormatConditionxx[2 * i].Condition := DevExpress.XtraGrid.FormatConditionEnum.Equal; StyleFormatConditionxx[2 * i].Value1 := 0; Self.GridView1.FormatConditions.AddRange(TArrayOfDevExpress_XtraGrid_StyleFormatCondition.Create(StyleFormatConditionxx[2 * i]));
因为我的数据中每一个I值的两列,故下面是另一列的处理,处理方式与上面相同 OclColumnyy[2 * i + 1] := Borland.Eco.Handles.OclColumn.Create; OclColumnyy[2 * i + 1].Expression := ' self.buymxs->select(p|(p.paperlx=''4'') and (p.buy.bm.name=''' + strname + ''') and ' + getsjstr() + ').xj->sum'; OclColumnyy[2 * i + 1].Name := 'oclmy' + convert.ToString(2 * i + 1); Self.ohbm.Columns.AddRange(TArrayOfBorland_Eco_Handles_AbstractColumn.Create(OclColumnyy[2 * i + 1]));
colxx[2 * i + 1] := DevExpress.XtraGrid.Columns.GridColumn.Create; colxx[2 * i + 1].Caption := strname + '金额'; colxx[2 * i + 1].FieldName := 'oclmy' + convert.ToString(2 * i + 1); colxx[2 * i + 1].Name := 'colmy' + convert.ToString(2 * i + 1); colxx[2 * i + 1].OptionsColumn.AllowEdit := False; colxx[2 * i + 1].OptionsColumn.AllowSort := DevExpress.Utils.DefaultBoolean.True; colxx[2 * i + 1].OptionsColumn.ReadOnly := True; colxx[2 * i + 1].Visible := True; colxx[2 * i + 1].VisibleIndex := 6 + 2 * i + 1; colxx[2 * i + 1].Width := 90; colxx[2 * i + 1].DisplayFormat.FormatString := '{0:n2}'; colxx[2 * i + 1].DisplayFormat.FormatType := DevExpress.Utils.FormatType.Numeric; colxx[2 * i + 1].SummaryItem.DisplayFormat := '{0:n2}'; colxx[2 * i + 1].SummaryItem.SummaryType := DevExpress.Data.SummaryItemType.Sum; Self.GridView1.Columns.AddRange(TArrayOfDevExpress_XtraGrid_Columns_GridColumn.Create(colxx[2 * i + 1])); Self.GridView1.GroupSummary.AddRange(TArrayOfDevExpress_XtraGrid_GridSummaryItem.Create(DevExpress.XtraGrid.GridGroupSummaryItem.Create(DevExpress.Data.SummaryItemType.Sum, 'oclmy' + convert.ToString(2 * i + 1), colxx[2 * i + 1], '{0:n2}')));
StyleFormatConditionxx[2 * i+1]:= DevExpress.XtraGrid.StyleFormatCondition.Create; StyleFormatConditionxx[2 * i+1].Appearance.ForeColor := System.Drawing.Color.White; StyleFormatConditionxx[2 * i+1].Appearance.Options.UseForeColor := True; StyleFormatConditionxx[2 * i+1].Column := colxx[2 * i+1]; StyleFormatConditionxx[2 * i+1].Condition := DevExpress.XtraGrid.FormatConditionEnum.Equal; StyleFormatConditionxx[2 * i+1].Value1 := 0; Self.GridView1.FormatConditions.AddRange(TArrayOfDevExpress_XtraGrid_StyleFormatCondition.Create(StyleFormatConditionxx[2 * i+1]));
end; ohbm.Execute;end; |
|
|