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

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
zimmion
Сообщения: 2
Зарегистрирован: 27 фев 2008, 15:14

Подскажите плз как в 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;
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Column.FieldName годится?
(Column пришел как параметр процедуры)
zimmion
Сообщения: 2
Зарегистрирован: 27 фев 2008, 15:14

Как один из вариантов, моно сделать следующий запрос по клику:

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

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; 
Serge_Bliznykov
Сообщения: 375
Зарегистрирован: 31 авг 2007, 03:06

Вот код из рабочей программы... разберётесь - честь Вам и хвала ;-)
нет - ну тогда будет работать ваш код ;-))

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

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;
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

ну и от меня до кучи :)
[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 связан с гридом
Изображение
Ответить