Страница 1 из 1

Как в dbgrideh получить имя поля той колонки, по заголовку которой Вы щелкнули????

Добавлено: 04 мар 2008, 12:57
zimmion
Подскажите плз как в dbgrideh получить имя поля той колонки, по заголовку которой Вы щелкнули????? По нажатию TitleBtn определенного столбца вызывается запрос реализующий сортировку:

Код: Выделить всё

procedure TForm_Contrag.DBGridEh1TitleBtnClick(Sender: TObject;   
  ACol: Integer; Column: TColumnEh);   
begin  
if DBGridEh1.???????????????????? then  
  begin  
  with DM1.Query do  
    begin  
      Close;   
      SQL.Clear;   
      SQL.Add('SELECT *');   
      SQL.Add('FROM jur');   
      SQL.Add('ORDER BY j_id');   
      Open;   
    end;   
  end;   
  
if DBGridEh1.???????????????????? then  
  begin  
    with DM1.Query do  
    begin  
      Close;   
      SQL.Clear;   
      SQL.Add('SELECT *');   
      SQL.Add('FROM jur');   
      SQL.Add('ORDER BY j_kod');   
      Open;   
    end;   
  end;

Re: Как в dbgrideh получить имя поля той колонки, по заголовку которой Вы щелкнули??

Добавлено: 04 мар 2008, 13:31
BBB
Column.FieldName годится?
(Column пришел как параметр процедуры)

Re: Как в dbgrideh получить имя поля той колонки, по заголовку которой Вы щелкнули??

Добавлено: 04 мар 2008, 15:13
zimmion
Как один из вариантов, моно сделать следующий запрос по клику:

Код: Выделить всё

procedure TForm_Contrag.DBGridEh1TitleBtnClick(Sender: TObject;      
  ACol: Integer; Column: TColumnEh);      
begin      
  with DM1.Query do      
    begin      
      Close;      
      SQL.Clear;      
      SQL.Add('SELECT *');      
      SQL.Add('FROM jur');      
      SQL.Add('ORDER BY '+Column.FieldName);      
      Open;      
    end;      
  end; 

Re: Как в dbgrideh получить имя поля той колонки, по заголовку которой Вы щелкнули??

Добавлено: 04 мар 2008, 20:06
Serge_Bliznykov
Вот код из рабочей программы... разберётесь - честь Вам и хвала ;-)
нет - ну тогда будет работать ваш код ;-))

Код: Выделить всё

procedure TDM.dbgBrowseTitleBtnClick(Sender: TObject; ACol: Integer; Column: TColumnEh);
begin
  if Column.Field.FieldKind <> fkData then Exit;
  if Column.Field.DataType = ftMemo then Exit;
  if (Column.Field.DataSet as TClientDataset).IndexFieldNames = Column.FieldName
 then
  begin
    (Column.Field.DataSet as TClientDataset).IndexFieldNames := '';
    Column.Title.SortMarker := smNoneEh;
  end
  else
  begin
    (Column.Field.DataSet as TClientDataset).IndexFieldNames := '';
    (Column.Field.DataSet as TClientDataset).IndexFieldNames := Column.FieldName;
    Column.Title.SortMarker := smUpEh;
  end;
end;

Re: Как в dbgrideh получить имя поля той колонки, по заголовку которой Вы щелкнули??

Добавлено: 05 мар 2008, 13:09
Игорь Акопян
ну и от меня до кучи :)
[syntax='delphi']
procedure TMegaForm.DBGridEh1SortMarkingChanged(Sender: TObject);
var
i: Integer;
sFields: TStringList;
bOrders: array of boolean;
begin
if DBGridEh1.DataSource.State = dsInactive then EXIT;
sFields := TStringList.Create;
try
SetLength(bOrders, dgrPatient.SortMarkedColumns.Count);

for I := 0 to DBGridEh1.SortMarkedColumns.Count-1 do
begin
sFields.Add(DBGridEh1.SortMarkedColumns.FieldName);
bOrders := DBGridEh1.SortMarkedColumns.Title.SortMarker = smUpEh;
end;

Table1.DoSortEx(sFields, bOrders);
finally
sFields.Clear;
sFields.Free;
end;
end;

[/syntax]

собсно Table1 связан с гридом