![]() |
dynamische Spaltenanzeige vom CxGrid
Guten Morgen liebe Liebenden,
leider bin ich heute hier Einzelkämpferin und brauch deswegen mal einen Tipp von euch. Und zwar arbeite ich schon in den letzten zwei Jahren mit dem CxGrid, aber bisher habe ich immer statisch angegeben, welche Spalten angezeigt werden sollen. Diesmal ist es aber notwendig, dass alle Spalten (derzeit sind es vier) angezeigt werden. Ich möchte die dynamisch angezeigt bekommen, falls später sich mal was ändert, weil eine Spalte 'rausgeschmissen wird oder was auch immer damit gemacht werden könnte. :) Ich weiß, dass es dazu eine Option gibt, aber bei der Komplexität der möglichen Eigenschaften bei der Komponente, habe ich keine so richtige Ahnung, welche da die richtige ist. Habt ihr einen Tipp? Wenn ich bei Google nach CxGrid schaue, lande ich immer nur bei Beiträgen zum StringGrid, also war das bisher auch keine große Hilfe. Dankeschön! |
AW: dynamische Spaltenanzeige vom CxGrid
Da wird mehr drin sein als Du brauchst, aber das was Du suchst sollte auch dabei sein.
Delphi-Quellcode:
CLASS Procedure TTemplate.FillGridFromDataset(cxGrid: TcxGrid;ADS: TADODataSet;WithFooters:Boolean=true;SummaryKind:TcxSummaryKind=skSum;ReadonlyStyle: TcxStyle = nil;HiddenList:TStringList=nil;WidthList:TStringList=nil;displayformatList:TStringList=nil);
var i:Integer; g:TcxGridDBColumn; gsi,si:TcxGridDBTableSummaryItem; View:TcxGridDBTableView; cur:TCursor; Procedure SetVisible; begin if Assigned(Hiddenlist) then if Hiddenlist.IndexOfName(ADS.Fields[i].FieldName)>-1 then ADS.Fields[i].Visible := False; end; Procedure SetWidth; var w:Integer; begin if Assigned(WidthList) then if WidthList.IndexOfName(ADS.Fields[i].FieldName)>-1 then if TryStrToInt( WidthList.Values[ADS.Fields[i].FieldName],w) then ADS.Fields[i].DisplayWidth := w; end; Procedure SetDisplayFormat; begin if Assigned(displayformatList) then if displayformatList.IndexOfName(ADS.Fields[i].FieldName)>-1 then try if Ads.Fields[i] is TNumericField then TNumericField(ADS.Fields[i]).DisplayFormat:=displayformatList.Values[ADS.Fields[i].FieldName]; if Ads.Fields[i] is TDateTimeField then TDateTimeField(ADS.Fields[i]).DisplayFormat:=displayformatList.Values[ADS.Fields[i].FieldName]; except // Todo except end; end; Procedure SetFixedCols; var w:Integer; bv:TcxGridDBBandedTableView; begin if cxGrid.ActiveLevel.GridView is TcxGridDBBandedTableView then begin bv := TcxGridDBBandedTableView(cxGrid.ActiveLevel.GridView); if Assigned(WidthList) then if WidthList.IndexOfName('FIXEDCOLS')>-1 then if TryStrToInt( WidthList.Values['FIXEDCOLS'],w) then FixColumns(bv,w); end; end; begin cur := Screen.Cursor; Screen.Cursor := crHourGlass; try ADS.DisableControls; View := TcxGridDBtableView(cxGrid.ActiveLevel.GridView); View.OptionsBehavior.FocusCellOnTab := true; for I := View.DataController.Summary.FooterSummaryItems.Count - 1 downto 0 do View.DataController.Summary.FooterSummaryItems[i].Free; for I := View.ColumnCount - 1 downto 0 do View.Columns[i].Free; if WithFooters then View.OptionsView.GroupFooters := gfVisibleWhenExpanded else View.OptionsView.GroupFooters := gfInvisible; for I := 0 to ADS.FieldCount - 1 do begin //if (ADS.Fields[i].DataType in [ftBCD,ftFMTBCD]) and (ADS.Fields[i].Tag<>-777) then TFloatField(ADS.Fields[i]).currency := true; if (ADS.Fields[i].DataType in [ftBCD,ftFMTBCD]) and (ADS.Fields[i].Tag<>-777) then TFloatField(ADS.Fields[i]).DisplayFormat := '#,##0.00'; SetVisible; SetWidth; SetDisplayFormat; if ADS.Fields[i].Visible then begin g := View.CreateColumn; g.DataBinding.FieldName := ADS.Fields[i].FieldName; if Assigned(ReadonlyStyle) and ((ADS.Fields[i].Datatype = ftAutoInc) or ADS.Fields[i].ReadOnly) then begin g.Styles.Content := ReadonlyStyle; g.Options.Focusing := false; g.Editing := false; end; View.OptionsView.Footer := WithFooters; if WithFooters then begin // if ADS.Fields[i].Datatype in [ ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftfmtbcd, ftDate, ftTime, ftDateTime, ftAutoInc, ftLargeint] then if (ADS.Fields[i].Datatype in [ ftCurrency, ftBCD, ftfmtbcd]) or ( ADS.Fields[i].Tag=333) then begin if not ((ADS.Fields[i].Datatype in [ ftDate, ftTime, ftDateTime] ) and (SummaryKind in [skSum])) then begin si:=TcxGridDBTableSummaryItem.Create(View.DataController.Summary.FooterSummaryItems); si.Column := g; si.FieldName := g.DataBinding.FieldName; si.Kind := SummaryKind; begin gsi:=TcxGridDBTableSummaryItem.Create(View.DataController.Summary.DefaultGroupSummaryItems); gsi.Column := g; gsi.FieldName := g.DataBinding.FieldName; gsi.Kind := SummaryKind; gsi.Position := spFooter; end; end; end; end; end; end; finally ADS.EnableControls; // View.ApplyBestFit(); SetOneGridWidth(cxGrid); SetFixedCols; Screen.Cursor := cur; end; end; |
AW: dynamische Spaltenanzeige vom CxGrid
Der Support von DevExpress ist vorbildlich. Du kannst die Leute auch immer fragen (DP ist natürlich besser, is ja klar).
|
AW: dynamische Spaltenanzeige vom CxGrid
Zitat:
Aber danke für den Code, den werde ich mir heute noch zu Gemüte führen! |
AW: dynamische Spaltenanzeige vom CxGrid
Hi Maya,
ist es auch. Versuch es mal mit : <ColumnVarName>.Visible := true/false; oder : <GridTableViewName>.Columns["index der Spalte"].visible := true/false; Alles klar ? Greetz Data P.S.: Bei DevExpress nicht verzagen, die Komponenten habe alle eine recht hohe Lernkurve, aber wenn man erstmal richtig drin ist, ist es einfach nur geil und der gute Support(wie oben schon erwähnt) hilft gerne und kompetent. |
AW: dynamische Spaltenanzeige vom CxGrid
Zitat:
|
AW: dynamische Spaltenanzeige vom CxGrid
Hi Maya,
wenn ich Dich jetzt richtig verstehe möchtest Du gerne die Spalten dynamisch zur Struktur der DB anpassen ? Wenn ja müssen die Spalten dynamisch erzeugt werden. Oder möchtest Du eine Änderung eines Datensatzes sofort erkennen ? Greetz Data |
AW: dynamische Spaltenanzeige vom CxGrid
Das hier
TableView.DataController.CreateAllItems(); |
AW: dynamische Spaltenanzeige vom CxGrid
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz