AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

dynamische Spaltenanzeige vom CxGrid

Ein Thema von Maya · begonnen am 8. Okt 2012 · letzter Beitrag vom 8. Okt 2012
Antwort Antwort
Benutzerbild von Maya
Maya

Registriert seit: 15. Jun 2011
Ort: Potsdam-Mittelmark
107 Beiträge
 
Delphi 2010 Enterprise
 
#1

dynamische Spaltenanzeige vom CxGrid

  Alt 8. Okt 2012, 07:34
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!
Status:
- FIAE
- Rechteinhaberin, ein Rüsselmops sein zu wollen
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: dynamische Spaltenanzeige vom CxGrid

  Alt 8. Okt 2012, 07:57
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

AW: dynamische Spaltenanzeige vom CxGrid

  Alt 8. Okt 2012, 08:04
Der Support von DevExpress ist vorbildlich. Du kannst die Leute auch immer fragen (DP ist natürlich besser, is ja klar).
  Mit Zitat antworten Zitat
Benutzerbild von Maya
Maya

Registriert seit: 15. Jun 2011
Ort: Potsdam-Mittelmark
107 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: dynamische Spaltenanzeige vom CxGrid

  Alt 8. Okt 2012, 09:14
Da wird mehr drin sein als Du brauchst, aber das was Du suchst sollte auch dabei sein.
Aber ich bin der Meinung, dass es da einfach 'ne Option gab, wo du 'n Häckchen dran machst und fertig ist das. -.-

Aber danke für den Code, den werde ich mir heute noch zu Gemüte führen!
Status:
- FIAE
- Rechteinhaberin, ein Rüsselmops sein zu wollen
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: dynamische Spaltenanzeige vom CxGrid

  Alt 8. Okt 2012, 10:24
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.
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von Maya
Maya

Registriert seit: 15. Jun 2011
Ort: Potsdam-Mittelmark
107 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: dynamische Spaltenanzeige vom CxGrid

  Alt 8. Okt 2012, 10:43
Hi Maya,

ist es auch. Versuch es mal mit :
<ColumnVarName>.Visible := true/false;

oder :
<GridTableViewName>.Columns["index der Spalte"].visible := true/false;
Mir geht's ja mehr darum, dass wenn an der DB-Tabelle was verändert wird, dass sofort im Programm sichtbar wird. D.h. dass der aus der Query herausliest, welche Spalten es alles gibt.
Status:
- FIAE
- Rechteinhaberin, ein Rüsselmops sein zu wollen
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: dynamische Spaltenanzeige vom CxGrid

  Alt 8. Okt 2012, 10:50
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
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

AW: dynamische Spaltenanzeige vom CxGrid

  Alt 8. Okt 2012, 10:51
Das hier
TableView.DataController.CreateAllItems();
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Benutzerbild von Maya
Maya

Registriert seit: 15. Jun 2011
Ort: Potsdam-Mittelmark
107 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: dynamische Spaltenanzeige vom CxGrid

  Alt 8. Okt 2012, 11:52
Das hier
TableView.DataController.CreateAllItems();
Genau, genau, genau das wollte ich! Danke dir!
Status:
- FIAE
- Rechteinhaberin, ein Rüsselmops sein zu wollen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz