Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.29;
Скачать: CL | DM;

Вниз

сотрировка   Найти похожие ветки 

 
rosl   (2003-09-08 03:40) [0]

Уважаемые МАСТЕРА!!!
Помогите разобраться.
Использую DBGridEh. Как добраться до sortmarker.
Оptioneh.dghavtosort = true; (sortmarker меняется автоматически при нажатии мышью)
В событии ontitltclick пишу:
Module_uv.Q_kr.Close;
Module_uv.Q_kr.SQL[4]:="";
Module_uv.Q_kr.SQL[4]:="order by " + column.ImeName;
Далее нужно положение sortmarker, чтоб программа знала как сортировать (по возрастанию или по убыванию)
if form2.DBGridEh2.Columns__?????????????????
Module_uv.Q_kr.SQL[5]:="desc";
Module_uv.Q_kr.Open;


 
Карелин Артем ©   (2003-09-08 08:48) [1]

procedure ApplySortingForSQLBasedDataSet(Grid: TCustomDBGridEh; DataSet: TDataSet;
UseFieldName: Boolean; IsReopen: Boolean);

function DeleteStr(str: String; sunstr: String): String;
var
i: Integer;
begin
i := Pos(sunstr, str);
if i <> 0 then
Delete(str, i, Length(sunstr));
Result := str;
end;

var
i, OrderLine: Integer;
s: String;
SQL: TStrings;
begin
if not IsSQLBasedDataSet(DataSet, SQL) then
raise Exception.Create(DataSet.ClassName + " is not SQL based dataset");

s := "";
for i := 0 to Grid.SortMarkedColumns.Count - 1 do
begin
if UseFieldName
then s := s + Grid.SortMarkedColumns[i].FieldName else s := s + IntToStr(Grid.SortMarkedColumns[i].Field.FieldNo);
if Grid.SortMarkedColumns[i].Title.SortMarker = smUpEh
then s := s + " DESC, "
else s := s + ", ";
end;

if s <> "" then
s := "ORDER BY " + Copy(s, 1, Length(s) - 2);

OrderLine := -1;
for i := 0 to SQL.Count - 1 do
if UpperCase(Copy(SQL[i], 1, Length("ORDER BY"))) = "ORDER BY" then
begin
OrderLine := i;
Break;
end;
if OrderLine = -1 then
begin
SQL.Add("");
OrderLine := SQL.Count-1;
end;

SQL.Strings[OrderLine] := s;

if IsReopen then
begin
DataSet.Close;
DataSet.Open;
end;
end;


 
Zacho ©   (2003-09-08 08:50) [2]

Во-первых, нужно не OnTitleClick, а OnSortMarkingChanged.
Во-вторых, вот кусок кода, формирующий строку с order by, думаю разберешься.
procedure TfmMOL.dbgMOLSortMarkingChanged(Sender: TObject);
var
i:integer;
OrderList:string;
begin
OrderList:=" ";
for i:=0 to (Sender as TDBGridEh).SortMarkedColumns.Count-1 do
begin
OrderList:=OrderList+", "+(Sender as TDBGridEh).SortMarkedColumns.Items[i].FieldName;
if (Sender as TDBGridEh).SortMarkedColumns.Items[i].Title.SortMarker=smDownEh then
OrderList:=OrderList+" ASC"
else OrderList:=OrderList+" DESC";
end;
delete(OrderList,2,1);
OrderList:="ORDER BY "+OrderList;


 
rosl   (2003-09-08 08:54) [3]

Все огромное спасибо спасибо за ответы, разобрался сам:

Module_uv.Q_kr.Close;
Module_uv.Q_kr.SQL[4]:="";
Module_uv.Q_kr.SQL[4]:="order by " + column.ImeName;
if Column.Title.SortMarker = smDownEh then
Module_uv.Q_kr.SQL[5]:="desc";
if Column.Title.SortMarker = smUpEh then
Module_uv.Q_kr.SQL[5]:="";
if Column.Title.SortMarker = smNoneEh then
Module_uv.Q_kr.SQL[5]:="";
Module_uv.Q_kr.Open;



Страницы: 1 вся ветка

Текущий архив: 2003.09.29;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.033 c
7-96470
Eliminator
2003-07-14 18:09
2003.09.29
Частоты видео адаптера и видео памяти


4-96493
Delf
2003-07-25 13:36
2003.09.29
Как узнать ProcessID зная дескриптор (hangle) окна


4-96498
Yuri Btr
2003-07-28 21:10
2003.09.29
Смена принтера по умолчанию


14-96438
Oleg_em
2003-09-10 12:27
2003.09.29
Кто нить юзает Flash Memory EASY Disk USB ?


14-96355
yaJohn
2003-09-08 17:08
2003.09.29
Спасем Билла Г!!!