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.