Fórum DbGrid ou StringGrid - Alteração nas posição das linhas #557201
16/06/2016
0
Ex.:
Tabela - Posição Inicial Tabela - Posição Final
N. OP.........Cliente ..............................................N.OP.........Cliente
1023..........cliente001..........................................1010..........cliente003
1203..........cliente002..........................................1203..........cliente002
1010..........cliente003..........................................1008..........cliente005
1003..........cliente004..........................................1023..........cliente001
1008..........cliente005..........................................1003..........cliente004
Notem q a posição da segunda tabela está reordenado conforme a necessidade que o cliente queira, preciso fazer essa alteração na Grid e por mais que eu pesquise, não consigo achar solução clara pra isso. Desde já agradeço a todos.
Valdenir Furlanetto
Curtir tópico
+ 0Post mais votado
27/06/2016
Valdenir Furlanetto
Gostei + 1
Mais Posts
17/06/2016
Valdenir Furlanetto
Gostei + 0
24/06/2016
Rafael Santos
Fiz uma função genérica recentemente para esse tipo de problema e por coincidência por Usuário :D
vou mandar a função com um overland para servir tanto para o TDBGrid quanto para o TXDBGrid.
Esse código serve para ordenar as colunas em tempo de execução, gravar a posição das colunas por usuários, gravar o index, a ordenação... etc
Gravo o um ini do usuário em uma tabela do banco para saber a ultima posição dele.. a procedure está comentada, creio que possa te ajudar bastante.
Segue o Código. Duvidas, estou a disposição.
declaração das Procedures
procedure GravaEOrdenaGridGenerico(pFuncao:Integer; // 1 = GRAVAR / 2 = FORMSHOW / 3 = FORMACTIVE
pTela:String; // Tela da Alteração Ex: CGSDocumentosDeServico
pGrid:TXDBGrid; // Grid que será usado
pDataSource : TDataSource; // DataSource associado ao Grid.
pPossuiCampoMarcar:Boolean = False; // Se possui o campo Marcar no Grid.
pIndexColunaDoCampoMarcar:Integer = 0; // Index da columa marcar
pExpanded:Boolean = False); overload; // Grid com Expanded (Agrupamento de Colunas)
//Overload da função GravaEOrdenaGridGenerico de XDbGrid para funcionar tbm com DbGrid Comum
procedure GravaEOrdenaGridGenerico(pFuncao:Integer; // 1 = GRAVAR / 2 = FORMSHOW / 3 = FORMACTIVE
pTela:String; // Tela da Alteração Ex: CGSDocumentosDeServico
pGrid:TDBGrid; // Grid que será usado
pDataSource : TDataSource; // DataSource associado ao Grid.
pPossuiCampoMarcar:Boolean = False; // Se possui o campo Marcar no Grid.
pIndexColunaDoCampoMarcar:Integer = 0); overload; // Index da columa marcarEscopo do código:
procedure GravaEOrdenaGridGenerico(pFuncao:Integer; // 1 = GRAVAR / 2 = FORMSHOW / 3 = FORMACTIVE
pTela:String; // Tela da Alteração Ex: CGSDocumentosDeServico
pGrid:TXDBGrid; // Grid que será usado
pDataSource : TDataSource; // DataSource associado ao Grid.
pPossuiCampoMarcar:Boolean = False; // Se possui o campo Marcar no Grid.
pIndexColunaDoCampoMarcar:Integer = 0; // Index da columa marcar
pExpanded:Boolean = False); // Grid com Expanded (Agrupamento de Colunas)
var RxConfiguraGridDefault : TRxMemoryData;
RxConfiguraGrid : TRxMemoryData;
I : Integer;
vTamanho : Integer;
vCont : Integer;
Procedure AtribuiPropriedadesMarcar;
var vCont : Integer;
vIndexMarcar : Integer;
Begin
vIndexMarcar := 0;
For vCont:=0 To pGrid.Columns.Count -1 Do
Begin
If pGrid.Columns[vcont].FieldName = 'MARCAR' Then
Begin
vIndexMarcar := vCont;
Break;
End
End;
pGrid.Columns[vIndexMarcar].CharCase := ecNormal;
pGrid.Columns[vIndexMarcar].CheckBox := True;
pGrid.Columns[vIndexMarcar].CheckBoxKind := ckCheck;
pGrid.Columns[vIndexMarcar].CheckBoxStyle := cbAuto;
pGrid.Columns[vIndexMarcar].CheckBoxToggle := ctSelectClick;
pGrid.Columns[vIndexMarcar].CheckBoxValues := 'S;N';
End;
procedure ConfiguraOrdenacao;
var vcampo, vPosCampo, vTamanho : String;
vPosicao, vCont : Integer;
vQrAuxiliar : TQuery;
vValidaPorPosicao : Boolean;
Procedure PopulaExapanded;
var vCont: Integer;
Begin
vCont :=0;
If pExpanded Then
Begin
RxConfiguraGrid.First;
While Not RxConfiguraGrid.Eof do
Begin
if (pGrid.Columns[vcont].Title.Caption = RxConfiguraGrid.FieldByName('TITULO').AsString) And
(RxConfiguraGrid.FieldByName('EXPANDCOLS').asInteger > 0 ) Then
pGrid.Columns[vcont].ExpandCols := RxConfiguraGrid.FieldByName('EXPANDCOLS').asInteger;
inc(vCont);
RxConfiguraGrid.Next
end;
RxConfiguraGrid.EmptyTable;
End;
end;
Begin
pGrid.DataSource := nil;
RxConfiguraGrid.Close;
RxConfiguraGrid.EmptyTable;
RxConfiguraGrid.Open;
RxConfiguraGrid.LoadFromDataSet(RxConfiguraGridDefault,0,lmCopy);
vPosCampo := '';
vQrAuxiliar := TQuery.Create(nil);
vQrAuxiliar.DatabaseName := cDatabaseName;
For vCont:= 0 To pGrid.Columns.Count-1 do
begin
vcampo := LeArqIni(vcUsuario+'/'+pTela+'Campo', FormatFloat('00',vCont));
If (vCampo <>'') and RxConfiguraGrid.Locate('CAMPO',vcampo,[]) Then
begin
vPosCampo := vPosCampo + vCampo+'|';
Try
vTamanho := LeArqIni(vcUsuario+'/'+pTela+'Tamanho', FormatFloat('00',vCont));
StrToInt(vTamanho);
Except
vTamanho := '0';
End;
If StrToInt(vTamanho) < 20 Then vTamanho := '20';
If RxConfiguraGrid.Locate('CAMPO',vCampo,[]) Then
Begin
RxConfiguraGrid.Edit;
RxConfiguraGrid.FieldByName('TAMANHO').asInteger := StrToInt(vTamanho);
RxConfiguraGrid.FieldByName('COLUNA' ).asInteger := vCont;
RxConfiguraGrid.Post;
End;
end;
end;
pGrid.Columns.clear;
RxConfiguraGrid.SortOnFields('COLUNA');
RxConfiguraGrid.First;
vcont := -1;
vValidaPorPosicao := False;
While Not RxConfiguraGrid.Eof do
Begin
vPosicao := Pos(RxConfiguraGrid.FieldByName('CAMPO').asstring+'|', vPosCampo);
If (vPosicao > 0) Then
Begin
pGrid.Columns.Add;
Inc(vcont);
pGrid.Columns[vcont].FieldName := RxConfiguraGrid.FieldByName('CAMPO').asstring;
pGrid.Columns[vcont].Title.Caption := RxConfiguraGrid.FieldByName('TITULO').asstring;
pGrid.Columns[vcont].Width := RxConfiguraGrid.FieldByName('TAMANHO').asInteger;
//pGrid.Columns[vcont].ExpandCols := RxConfiguraGrid.FieldByName('EXPANDCOLS').asInteger;
Delete(vPosCampo,vPosicao,Length(RxConfiguraGrid.FieldByName('CAMPO').asstring)+1);
If pExpanded Then
Begin
RxConfiguraGrid.Next;
vValidaPorPosicao := True;
End
Else
RxConfiguraGrid.Delete;
End
Else
RxConfiguraGrid.Next;
End;
If vValidaPorPosicao Then
PopulaExapanded;
if pPossuiCampoMarcar Then
AtribuiPropriedadesMarcar;
{ Caso alguma coluna seja adicionada mais tarde, irá para o final da coluna }
RxConfiguraGrid.First;
While Not RxConfiguraGrid.Eof do
Begin
Inc(vcont);
pGrid.Columns.Add;
pGrid.Columns[vcont].FieldName := RxConfiguraGrid.FieldByName('CAMPO').AsString;
pGrid.Columns[vcont].Title.Caption := RxConfiguraGrid.FieldByName('TITULO').AsString;
pGrid.Columns[vcont].Width := RxConfiguraGrid.FieldByName('TAMANHO').AsInteger;
pGrid.Columns[vcont].ExpandCols := RxConfiguraGrid.FieldByName('EXPANDCOLS').asInteger;
If pExpanded Then
RxConfiguraGrid.Next
Else
RxConfiguraGrid.Delete;
end;
If Not(RxConfiguraGrid.IsEmpty) Then
PopulaExapanded;
FreeAndNil(vQrAuxiliar);
pGrid.DataSource := pDataSource;
If pPossuiCampoMarcar Then
AtribuiPropriedadesMarcar;
end;
Procedure AdicionaCamposNaRx;
var vQry : TQuery;
begin
vQry := TQuery.Create(nil);
vQry.DatabaseName := cDataBaseName;
With vQry do
begin
Close;
Sql.Clear;
Sql.Add(' SELECT LPAD('' '', 50, '' '') CAMPO ');
Sql.Add(' , LPAD('' '', 50, '' '') TITULO ');
Sql.Add(' , 0 TAMANHO ');
Sql.Add(' , 0 COLUNA ');
Sql.Add(' , 0 EXPANDCOLS ');
Sql.Add(' FROM DUAL ');
AbrirQuery(vQry);
If RxConfiguraGridDefault.Fields.Count = 0 Then
RxConfiguraGridDefault.CopyStructure(vQry);
RxConfiguraGridDefault.Open;
//RxConfiguraGridDefault.LoadFromDataSet(vQry,0,LmCopy);
If RxConfiguraGrid.Fields.Count = 0 Then
RxConfiguraGrid.CopyStructure(vQry);
RxConfiguraGrid.Open;
//RxConfiguraGrid.LoadFromDataSet(vQry,0,LmCopy);
end;
FreeAndNil(vQry);
end;
Function CarregandoDadosGrid(Rx: TRxMemoryData; Grid: TXDBGrid): TRxMemoryData;
Var vcont : Integer;
Begin
Rx.close;
Rx.Open;
For vCont := 0 To Grid.Columns.Count -1 Do
Begin
Rx.Append;
Rx.FieldByName('CAMPO' ).asstring := Grid.Columns[vcont].FieldName;
Rx.FieldByName('TITULO' ).asstring := Grid.Columns[vcont].Title.Caption;
Rx.FieldByName('TAMANHO' ).asInteger := Grid.Columns[vcont].Width;
Rx.FieldByName('EXPANDCOLS').asInteger := Grid.Columns[vcont].ExpandCols;
Rx.FieldByName('COLUNA' ).asInteger := vCont;
Rx.Post;
End;
Result := Rx;
End;
Procedure ConfiguraOrdernacaoGenerica(RxOrigem, RxDestino: TRxMemoryData; Grid: TXDBGrid);
Begin
//Carregando as configurações(Default) do Grid.
If Assigned(RxOrigem) then
RxOrigem := CarregandoDadosGrid( RxOrigem, pGrid );
//Carregando as configurações do grid.
If Assigned(RxOrigem) and Assigned(RxDestino) then
Begin
RxDestino.close;
RxDestino.EmptyTable;
RxDestino.Open;
RxDestino.LoadFromDataSet( RxOrigem, 0, lmCopy );
RxDestino := CarregandoDadosGrid( RxDestino, grid );
End;
End;
Function LendoDB(Rx: TRxMemoryData; Grid: TXDBGrid): TRxMemoryData;
Var
vcont : Integer;
vTamanho : Integer;
vcampo : String;
vPosCampo : String;
Begin
For vcont:= 0 To Grid.Columns.Count-1 do
begin
Try
vcampo := LeArqIni(vcUsuario+'/'+pTela+'SelecCampo', FormatFloat('00',vcont));
If (vcampo <> '') and Rx.Locate('CAMPO', vcampo,[]) then
Begin
Try
vTamanho := StrToInt(LeArqIni(vcUsuario+'/'+pTela+'SelecTam', FormatFloat('00',vCont)));
Except
vTamanho := 20;
End;
Rx.Edit;
Rx.FieldByName('TAMANHO').asInteger := vTamanho;
Rx.FieldByName('COLUNA' ).asInteger := vcont;
Rx.Post;
End;
Except
End;
end;
Result := Rx;
end;
procedure AtualizaGrid(Rx: TRxMemoryData; Grid: TXDBGrid);
Var vcont : Integer;
begin
Rx.First;
While not rx.eof do
Begin
vcont := Rx.FieldByName('COLUNA').AsInteger;
Grid.Columns[vcont].FieldName := Rx.FieldByName('CAMPO' ).AsString;
Grid.Columns[vcont].Title.Caption := Rx.FieldByName('TITULO' ).AsString;
Grid.Columns[vcont].Width := Rx.FieldByName('TAMANHO').AsInteger;
Grid.Columns[vcont].ExpandCols := Rx.FieldByName('EXPANDCOLS').AsInteger;
Grid.Columns[vcont].Expanded := Rx.FieldByName('EXPANDCOLS').AsInteger <> 0;
rx.Next;
End;
end;
Procedure GravaOrdenacao;
Var vcont : Integer;
Begin
If Not vcDatabase.InTransaction then
vcDatabase.StartTransaction;
For vcont:=0 to pGrid.Columns.count-1 do
Begin
GravaArqIni(vcUsuario+'/'+pTela+'Campo', FormatFloat('00',vcont),pGrid.Columns[vcont].FieldName);
If pGrid.Columns[vcont].Width < 20 Then
pGrid.Columns[vcont].Width := 20;
GravaArqIni(vcUsuario+'/'+pTela+'Tamanho' , FormatFloat('00',vcont),inttostr(pGrid.Columns[vcont].Width ));
GravaArqIni(vcUsuario+'/'+pTela+'SelecCampo', FormatFloat('00',vcont), pGrid.Columns[vcont].FieldName );
GravaArqIni(vcUsuario+'/'+pTela+'SelecTam' , FormatFloat('00',vcont),inttostr(pGrid.Columns[vcont].Width ));
GravaArqIni(vcUsuario+'/'+pTela+'Expandcols', FormatFloat('00',vcont),inttostr(pGrid.Columns[vcont].ExpandCols))
End;
If vcDatabase.InTransaction then
vcDatabase.Commit;
End;
Function ValidaTituloParaCampo(pString : String) : String;
var i : Integer; vAux : String;
const vCaracteres : String = ' "‡ƒ!@#$%¨&*()-+=´[]~/;.,<>:?¿\|^`ºª°¹²³£¢¬§''';
begin
For i := 1 to Length(pString) do
begin
If Pos(pString[i],vCaracteres) = 0 then
vAux := vAux + pString[i];
end;
Result := vAux;
end;
Procedure AtualizaCamposExpand;
Begin
RxConfiguraGridDefault.First;
While Not(RxConfiguraGridDefault.Eof) Do
Begin
If (Trim(RxConfiguraGridDefault.FieldByName('CAMPO').asstring) = '') Then
Begin
RxConfiguraGridDefault.Edit;
RxConfiguraGridDefault.FieldByName('CAMPO').asstring := RemoveAcentos(ValidaTituloParaCampo(RxConfiguraGridDefault.FieldByName('TITULO').asstring)) + '_Grid';
RxConfiguraGridDefault.Post;
End;
RxConfiguraGridDefault.Next;
End;
End;
Begin
///////////////////
// Rafael.Santos //
///////////////////
RxConfiguraGridDefault := TRxMemoryData.Create(Nil);
RxConfiguraGrid := TRxMemoryData.Create(Nil);
AdicionaCamposNaRx;
If pFuncao = 1 Then //GRAVAR
GravaOrdenacao
Else If pFuncao = 2 Then //FORMSHOW
Begin
RxConfiguraGridDefault.close;
RxConfiguraGridDefault.Open;
For vCont:=0 To pGrid.Columns.Count -1 Do
Begin
RxConfiguraGridDefault.Append;
RxConfiguraGridDefault.FieldByName('CAMPO' ).asstring := pGrid.Columns[vcont].FieldName;
RxConfiguraGridDefault.FieldByName('TITULO' ).asstring := pGrid.Columns[vcont].Title.Caption;
RxConfiguraGridDefault.FieldByName('TAMANHO' ).asInteger := pGrid.Columns[vcont].Width;
RxConfiguraGridDefault.FieldByName('EXPANDCOLS').asInteger := pGrid.Columns[vcont].ExpandCols;
RxConfiguraGridDefault.FieldByName('COLUNA' ).asInteger := vCont;
RxConfiguraGridDefault.Post;
End;
If pExpanded Then
AtualizaCamposExpand;
ConfiguraOrdenacao;
//AtualizaGrid( RxConfiguraGridDefault, pGrid);
End
Else If pFuncao = 3 Then //FORMACTIVE
Begin
ConfiguraOrdernacaoGenerica(RxConfiguraGridDefault, nil, pGrid);
ConfiguraOrdernacaoGenerica(RxConfiguraGridDefault, RxConfiguraGrid, pGrid);
RxConfiguraGrid := LendoDB(RxConfiguraGrid, pGrid);
AtualizaGrid( RxConfiguraGrid, pGrid);
End;
FreeAndNil(RxConfiguraGridDefault);
FreeAndNil(RxConfiguraGrid);
end;
//overload da função GravaEOrdenaGridGenerico de XDbGrid para funcionar tbm com DbGrid Comum
procedure GravaEOrdenaGridGenerico(pFuncao:Integer; // 1 = GRAVAR / 2 = FORMSHOW / 3 = FORMACTIVE
pTela:String; // Tela da Alteração Ex: CGSDocumentosDeServico
pGrid:TDBGrid; // Grid que será usado
pDataSource : TDataSource; // DataSource associado ao Grid.
pPossuiCampoMarcar:Boolean = False; // Se possui o campo Marcar no Grid.
pIndexColunaDoCampoMarcar:Integer = 0); // Index da columa marcar
var RxConfiguraGridDefault : TRxMemoryData;
RxConfiguraGrid : TRxMemoryData;
I : Integer;
vTamanho : Integer;
vCont : Integer;
Procedure AtribuiPropriedadesMarcar;
Begin
//Incompactivel com DBGrid comum
// pGrid.Columns[pIndexColunaDoCampoMarcar].CharCase := ecNormal;
// pGrid.Columns[pIndexColunaDoCampoMarcar].CheckBox := True;
// pGrid.Columns[pIndexColunaDoCampoMarcar].CheckBoxKind := ckCheck;
// pGrid.Columns[pIndexColunaDoCampoMarcar].CheckBoxStyle := cbAuto;
// pGrid.Columns[pIndexColunaDoCampoMarcar].CheckBoxToggle := ctSelectClick;
// pGrid.Columns[pIndexColunaDoCampoMarcar].CheckBoxValues := 'S;N';
End;
procedure ConfiguraOrdenacao;
var vcampo, vPosCampo, vTamanho : String;
vPosicao, vCont : Integer;
vQrAuxiliar : TQuery;
Begin
pGrid.DataSource := nil;
RxConfiguraGrid.Close;
RxConfiguraGrid.EmptyTable;
RxConfiguraGrid.Open;
RxConfiguraGrid.LoadFromDataSet(RxConfiguraGridDefault,0,lmCopy);
vPosCampo := '';
vQrAuxiliar := TQuery.Create(nil);
vQrAuxiliar.DatabaseName := cDatabaseName;
For vCont:= 0 To pGrid.Columns.Count-1 do
begin
vcampo := LeArqIni(vcUsuario+'/'+pTela+'Campo', FormatFloat('00',vCont));
If (vCampo <>'') and RxConfiguraGrid.Locate('CAMPO',vcampo,[]) Then
begin
vPosCampo := vPosCampo + vCampo+'|';
Try
vTamanho := LeArqIni(vcUsuario+'/'+pTela+'Tamanho', FormatFloat('00',vCont));
StrToInt(vTamanho);
Except
vTamanho := '0';
End;
If StrToInt(vTamanho) < 20 Then vTamanho := '20';
If RxConfiguraGrid.Locate('CAMPO',vCampo,[]) Then
Begin
RxConfiguraGrid.Edit;
RxConfiguraGrid.FieldByName('TAMANHO').asInteger := StrToInt(vTamanho);
RxConfiguraGrid.FieldByName('COLUNA' ).asInteger := vCont;
RxConfiguraGrid.Post;
End;
end;
end;
pGrid.Columns.clear;
RxConfiguraGrid.SortOnFields('COLUNA');
RxConfiguraGrid.First;
vcont := -1;
While Not RxConfiguraGrid.Eof do
Begin
vPosicao := Pos(RxConfiguraGrid.FieldByName('CAMPO').asstring+'|', vPosCampo);
If (vPosicao > 0) Then
Begin
pGrid.Columns.Add;
Inc(vcont);
pGrid.Columns[vcont].FieldName := RxConfiguraGrid.FieldByName('CAMPO').asstring;
pGrid.Columns[vcont].Title.Caption := RxConfiguraGrid.FieldByName('TITULO').asstring;
pGrid.Columns[vcont].Width := RxConfiguraGrid.FieldByName('TAMANHO').asInteger;
Delete(vPosCampo,vPosicao,Length(RxConfiguraGrid.FieldByName('CAMPO').asstring)+1);
RxConfiguraGrid.Delete;
End
Else
RxConfiguraGrid.Next;
End;
if pPossuiCampoMarcar Then
AtribuiPropriedadesMarcar;
{ Caso alguma coluna seja adicionada mais tarde, irá para o final da coluna }
RxConfiguraGrid.First;
While Not RxConfiguraGrid.Eof do
Begin
Inc(vcont);
pGrid.Columns.Add;
pGrid.Columns[vcont].FieldName := RxConfiguraGrid.FieldByName('CAMPO').AsString;
pGrid.Columns[vcont].Title.Caption := RxConfiguraGrid.FieldByName('TITULO').AsString;
pGrid.Columns[vcont].Width := RxConfiguraGrid.FieldByName('TAMANHO').AsInteger;
RxConfiguraGrid.Delete;
end;
FreeAndNil(vQrAuxiliar);
pGrid.DataSource := pDataSource;
If pPossuiCampoMarcar Then
AtribuiPropriedadesMarcar;
end;
Procedure AdicionaCamposNaRx;
var vQry : TQuery;
begin
vQry := TQuery.Create(nil);
vQry.DatabaseName := cDataBaseName;
With vQry do
begin
Close;
Sql.Clear;
Sql.Add(' SELECT LPAD('' '', 50, '' '') CAMPO ');
Sql.Add(' , LPAD('' '', 50, '' '') TITULO ');
Sql.Add(' , 0 TAMANHO ');
Sql.Add(' , 0 COLUNA ');
Sql.Add(' FROM DUAL ');
AbrirQuery(vQry);
If RxConfiguraGridDefault.Fields.Count = 0 Then
RxConfiguraGridDefault.CopyStructure(vQry);
RxConfiguraGridDefault.Open;
//RxConfiguraGridDefault.LoadFromDataSet(vQry,0,LmCopy);
If RxConfiguraGrid.Fields.Count = 0 Then
RxConfiguraGrid.CopyStructure(vQry);
RxConfiguraGrid.Open;
//RxConfiguraGrid.LoadFromDataSet(vQry,0,LmCopy);
end;
FreeAndNil(vQry);
end;
Function CarregandoDadosGrid(Rx: TRxMemoryData; Grid: TDBGrid): TRxMemoryData;
Var vcont : Integer;
Begin
Rx.close;
Rx.Open;
For vCont := 0 To Grid.Columns.Count -1 Do
Begin
Rx.Append;
Rx.FieldByName('CAMPO' ).asstring := Grid.Columns[vcont].FieldName;
Rx.FieldByName('TITULO' ).asstring := Grid.Columns[vcont].Title.Caption;
Rx.FieldByName('TAMANHO').asInteger := Grid.Columns[vcont].Width;
Rx.FieldByName('COLUNA' ).asInteger := vCont;
Rx.Post;
End;
Result := Rx;
End;
Procedure ConfiguraOrdernacaoGenerica(RxOrigem, RxDestino: TRxMemoryData; Grid: TDBGrid);
Begin
//Carregando as configurações(Default) do Grid.
If Assigned(RxOrigem) then
RxOrigem := CarregandoDadosGrid( RxOrigem, pGrid );
//Carregando as configurações do grid.
If Assigned(RxOrigem) and Assigned(RxDestino) then
Begin
RxDestino.close;
RxDestino.EmptyTable;
RxDestino.Open;
RxDestino.LoadFromDataSet( RxOrigem, 0, lmCopy );
RxDestino := CarregandoDadosGrid( RxDestino, grid );
End;
End;
Function LendoDB(Rx: TRxMemoryData; Grid: TDBGrid): TRxMemoryData;
Var
vcont : Integer;
vTamanho : Integer;
vcampo : String;
vPosCampo : String;
Begin
For vcont:= 0 To Grid.Columns.Count-1 do
begin
Try
vcampo := LeArqIni(vcUsuario+'/'+pTela+'SelecCampo', FormatFloat('00',vcont));
If (vcampo <> '') and Rx.Locate('CAMPO', vcampo,[]) then
Begin
Try
vTamanho := StrToInt(LeArqIni(vcUsuario+'/'+pTela+'SelecTam', FormatFloat('00',vCont)));
Except
vTamanho := 20;
End;
Rx.Edit;
Rx.FieldByName('TAMANHO').asInteger := vTamanho;
Rx.FieldByName('COLUNA' ).asInteger := vcont;
Rx.Post;
End;
Except
End;
end;
Result := Rx;
end;
procedure AtualizaGrid(Rx: TRxMemoryData; Grid: TDBGrid);
Var vcont : Integer;
begin
Rx.First;
While not rx.eof do
Begin
vcont := Rx.FieldByName('COLUNA').AsInteger;
Grid.Columns[vcont].FieldName := Rx.FieldByName('CAMPO' ).AsString;
Grid.Columns[vcont].Title.Caption := Rx.FieldByName('TITULO' ).AsString;
Grid.Columns[vcont].Width := Rx.FieldByName('TAMANHO').AsInteger;
rx.Next;
End;
end;
Procedure GravaOrdenacao;
Var vcont : Integer;
Begin
If Not vcDatabase.InTransaction then
vcDatabase.StartTransaction;
For vcont:=0 to pGrid.Columns.count-1 do
Begin
GravaArqIni(vcUsuario+'/'+pTela+'Campo', FormatFloat('00',vcont),pGrid.Columns[vcont].FieldName);
If pGrid.Columns[vcont].Width < 20 Then
pGrid.Columns[vcont].Width := 20;
GravaArqIni(vcUsuario+'/'+pTela+'Tamanho' , FormatFloat('00',vcont),inttostr(pGrid.Columns[vcont].Width) );
GravaArqIni(vcUsuario+'/'+pTela+'SelecCampo', FormatFloat('00',vcont), pGrid.Columns[vcont].FieldName);
GravaArqIni(vcUsuario+'/'+pTela+'SelecTam' , FormatFloat('00',vcont),inttostr(pGrid.Columns[vcont].Width) );
End;
If vcDatabase.InTransaction then
vcDatabase.Commit;
End;
Begin
///////////////////
// Rafael.Santos - Overload Andre.Oliveira//
///////////////////
RxConfiguraGridDefault := TRxMemoryData.Create(Nil);
RxConfiguraGrid := TRxMemoryData.Create(Nil);
AdicionaCamposNaRx;
If pFuncao = 1 Then //GRAVAR
GravaOrdenacao
Else If pFuncao = 2 Then //FORMSHOW
Begin
Try { Tamanho da fonte }
vTamanho := StrtoInt(LeArqIni(pTela + '/' + vcUsuario, 'Fonte'));
Except
vTamanho := 7;
End;
pGrid.Font.Size := vTamanho;
For i := 0 To (pGrid.Columns.Count - 1) Do
begin
pGrid.Columns[i].Title.Font.Size := pGrid.Font.Size;
pGrid.Columns[i].Font.Size := pGrid.Font.Size;
end;
RxConfiguraGridDefault.close;
RxConfiguraGridDefault.Open;
For vCont:=0 To pGrid.Columns.Count -1 Do
Begin
RxConfiguraGridDefault.Append;
RxConfiguraGridDefault.FieldByName('CAMPO' ).asstring := pGrid.Columns[vcont].FieldName;
RxConfiguraGridDefault.FieldByName('TITULO' ).asstring := pGrid.Columns[vcont].Title.Caption;
RxConfiguraGridDefault.FieldByName('TAMANHO').asInteger := pGrid.Columns[vcont].Width;
RxConfiguraGridDefault.FieldByName('COLUNA' ).asInteger := vCont;
RxConfiguraGridDefault.Post;
End;
ConfiguraOrdenacao;
End
Else If pFuncao = 3 Then //FORMACTIVE
Begin
ConfiguraOrdernacaoGenerica(RxConfiguraGridDefault, nil, pGrid);
ConfiguraOrdernacaoGenerica(RxConfiguraGridDefault, RxConfiguraGrid, pGrid);
RxConfiguraGrid := LendoDB(RxConfiguraGrid, pGrid);
AtualizaGrid( RxConfiguraGrid, pGrid);
End;
FreeAndNil(RxConfiguraGridDefault);
FreeAndNil(RxConfiguraGrid);
end;Gostei + 0
30/06/2016
Rafael Santos
Obrigado.
Gostei + 0
04/07/2016
Valdenir Furlanetto
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)