Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   TCxGrid, OnGetGridView (https://www.clubdelphi.com/foros/showthread.php?t=40809)

calogero 27-02-2007 19:19:31

TCxGrid, OnGetGridView
 
1 Archivos Adjunto(s)
Hola, que tal:


Estoy trabajando con un componente que se llama cxGrid, en el cual tengo dos niveles cada nivel con un dbTable, y un nivel dentro del otro, en pocas palabras es un maestro detalle les paso el siguiente codigo:

Este codigo lo bajé de esta página: https://www.devexpress.com/Support/C...3-52dd97577823
el archivo se llama:
dxKB_388.zip


Código:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxEdit,
  cxGridCustomTableView, cxGridTableView, cxClasses, cxControls,
  cxGridCustomView, cxGridLevel, cxGrid, cxDataStorage;

const
  CM_GETGRIDVIEW = WM_USER + 1;

type
  TForm1 = class(TForm)
    cxGrid1Level1: TcxGridLevel;
    cxGrid1: TcxGrid;
    cxGrid1Level2: TcxGridLevel;
    cxGrid1TableView1: TcxGridTableView;
    cxGrid1TableView1Column1: TcxGridColumn;
    cxGrid1TableView1Column2: TcxGridColumn;
    cxGrid1TableView1Column3: TcxGridColumn;
    cxGrid1TableView2: TcxGridTableView;
    cxGrid1TableView2Column1: TcxGridColumn;
    cxGrid1TableView2Column2: TcxGridColumn;
    procedure FormCreate(Sender: TObject);
    procedure cxGrid1Level2GetGridView(Sender: TcxGridLevel;
      AMasterRecord: TcxCustomGridRecord;
      var AGridView: TcxCustomGridView);
  private
    procedure CmGetGridView(var Msg: TMessage); message CM_GETGRIDVIEW;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation


{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  with cxGrid1TableView1 do
  begin
    for I := 0 to DataController.ItemCount - 1 do
      Items[i].DataBinding.ValueTypeClass := TcxStringValueType;
    DataController.RecordCount := 2;
    DataController.Values[0, 0] := 'Value 0';
    DataController.Values[0, 1] := 'Value 0 Column 1';
    DataController.Values[0, 2] := 'Value 0 Column 2';
    DataController.Values[1, 0] := 'Value 1';
    DataController.Values[1, 1] := 'Value 1 Column 1';
    DataController.Values[1, 2] := 'Value 1 Column 2';
  end;

  with cxGrid1TableView2 do
    for I := 0 to DataController.ItemCount - 1 do
      Items[i].DataBinding.ValueTypeClass := TcxStringValueType;
end;

procedure TForm1.cxGrid1Level2GetGridView(Sender: TcxGridLevel;
  AMasterRecord: TcxCustomGridRecord; var AGridView: TcxCustomGridView);
begin
  PostMessage(handle, CM_GETGRIDVIEW, Integer(AMasterREcord), Integer
(AGridView));
end;

procedure TForm1.CmGetGridView(var Msg: TMessage);
var
  I, J: Integer;
  AMasterRecord: TcxCustomGridRecord;
  AGridView: TcxGridTableView;
  AClone: TcxCustomGridView;
begin
  if not ((TObject(Msg.WParam) is TcxCustomGridRecord) and (TObject
(Msg.LParam) is TcxGridTableView)) then
    Exit;
  AMasterRecord := TcxCustomGridRecord(Msg.WParam);
  AGridView := TcxGridTableView(Msg.LParam);
  AClone := AGridView.Clones[AGridView.CloneCount - 1];
  AClone.BeginUpdate;
  try
    with AClone.DataController do
    begin
      RecordCount := (AMasterRecord.Index + 1) * 5;
      for I := 0 to RecordCount - 1 do
        for J := 0 to AGridView.ColumnCount - 1 do
          if  J = 0 then
            Values[I, J] := 'Value ' + IntToStr(AMasterRecord.Index)
          else
            Values[I, J] := Format('Value %d Record %d Column %d',
AMasterRecord.Index, I, J])
    end
  finally
    AClone.EndUpdate;
  end;
end;

end.


Si abren este codigo en delphi y establecen las siguientes propiedades del grid:

Align: alNone
Width: 300

y ejecutan el codigo, al abrir uno de los dos gridview maestro, se darán cuenta que si usan la barra de desplazamiento horizontal perteneciente al cxgrid principal y no al gridview detalle o al gridview maestro solo se moverá o desplazará hacia los lados el gridview maestro pero no el gridview detalle.

¿ Cómo puedo hacer para que se desplacen los dos al mismo tiempo el maestro y el detalle ?

Si alguien tiene alguna sugerencia agradezco su ayuda, o si alguien sabe algún mejor modo de hacerlo.

waly2k1 04-08-2008 03:31:59

Sin respuesta
 
Mirá calogero, yo en un caso similar tenia una griilla y en el evento
onFocusedRecordChanged refrescaba la consulta para cargar los detalles
y no así 2 datasource master/detail. Nose si me explico o si te sirve pero
bueh vale la pena intentarlo. El tema de la barra no es problema salvo
que no te actualicen los datos de la tabla detalles.

Saludos


La franja horaria es GMT +2. Ahora son las 09:12:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi