Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2018, 10:30   #11
Etsareva
Форумчанин
 
Регистрация: 26.01.2018
Сообщений: 180
По умолчанию

вообще процедура создания дерева выглядит след. образом:
Код:
procedure CreateStandNodes(Parent:TTreeNode);
var
  okp_id, Text:string;
  MyRecPtr:array of PDataStand;
  i:integer;
  node:TTreeNode;
begin
  //Ищем изделия, которые входят в этот класс
  okp_id:=IntToStr(PDataStand(Parent.Data)^.ID);
  StdMainForm.ADOQuery.SQL.Clear;
  StdMainForm.ADOQuery.SQL.Add('Select Stand.Stand_ID,Stand.Mark,Stand.Type,Gost.Name, Stand.Prd, Stand.Symbol, Stand.Name as ProductName from Stand, Gost');
  StdMainForm.ADOQuery.SQL.Add('where Stand.OKP_ID='+QuotedStr(okp_id));
  StdMainForm.ADOQuery.SQL.Add('and Gost.Gost_ID=Stand.Gost_ID');
 // StdMainForm.ADOQuery.SQL.Add('ORDER BY Stand.Mark ASC');
  StdMainForm.ADOQuery.SQL.Add('ORDER BY CASE WHEN ISNUMERIC(Stand.Mark)<>0 THEN CAST(Stand.Mark AS INT)');
  StdMainForm.ADOQuery.SQL.Add('ELSE 2147483648 END ASC, CASE WHEN Stand.Mark LIKE ''%[0-9]%'' THEN 1 ELSE 0 END ASC, Stand.Mark ASC');
  try StdMainForm.ADOQuery.Open;
  except
    on E:Exception do begin
      ShowMessage(E.Message);
      Exit;
    end;
  end;
  //Выводим в дереве изделия, относящиеся к указанному классу
  if StdMainForm.DataSource.DataSet.RecordCount=0 then begin
    //Изделий в классе нет
  //  Parent.Delete;
  //  DeleteEmptyParents(Parent);
    Parent.HasChildren:=False;
    Exit;
  end;
  with StdMainForm.DataSource.DataSet do begin
    SetLength(MyRecPtr, RecordCount);
    StdMainForm.TreeStandart.Items.BeginUpdate;
    for i:=0 to RecordCount-1 do begin
      new(MyRecPtr[i]);

      //формирование записи в дереве (последовательность атрибутов в записи)
      if FieldByName('Type').AsInteger=0 then
        MyRecPtr[i]^.ObjectType:=soERE
      else
        MyRecPtr[i]^.ObjectType:=soStand;
        if FieldByName('Prd').AsInteger=0 then begin
          if FieldByName('Symbol').AsInteger=0 then
          Text:=FieldByName('ProductName').AsString+' '+FieldByName('Name').AsString+' '+FieldByName('Mark').AsString else
          if FieldByName('Symbol').AsInteger=1 then
          Text:=FieldByName('ProductName').AsString+' '+FieldByName('Name').AsString+' '+'-'+' '+FieldByName('Mark').AsString else
          if FieldByName('Symbol').AsInteger=2 then
          Text:=FieldByName('ProductName').AsString+' '+FieldByName('Name').AsString+''+'-'+''+FieldByName('Mark').AsString;
         end else
        Text:=FieldByName('ProductName').AsString+' '+FieldByName('Mark').AsString+' '+FieldByName('Name').AsString ;
      MyRecPtr[i]^.ID:=FieldByName('stand_id').AsInteger;
      MyRecPtr[i]^.OKP_ID:=PDataStand(Parent.Data)^.ID;
      node:=StdMainForm.TreeStandart.Items.AddChildObject(Parent, text, MyRecPtr[i]);
      case MyRecPtr[i]^.ObjectType of
        soERE:begin
            node.ImageIndex:=IconStandERE;
            node.SelectedIndex:=IconStandERE;
          end;
        soStand:begin
            node.ImageIndex:=IconStandSTD;
            node.SelectedIndex:=IconStandSTD;
          end;
      end;
      Next;
    end;
    StdMainForm.TreeStandart.Items.EndUpdate;
  end;
end;
попыталась отсортировать SQL-запросом, не сортирует, подумала. может нужно в самом TreeView сортировать
Etsareva вне форума Ответить с цитированием
Старый 01.02.2018, 10:32   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Etsareva Посмотреть сообщение
попыталась отсортировать SQL-запросом, не сортирует
сортирует.
просто сортирует строки по правилам сортировки строк!
О том, как это изменить и идёт речь в этом топике.



Цитата:
Сообщение от Etsareva Посмотреть сообщение
но это будет в другом разделе дерева
а что, для каждого раздела дерева будете свою функцию сортировки писать?
или, может быть, просто принимать сортировку в виде строк как то, что есть?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.02.2018, 10:34   #13
Etsareva
Форумчанин
 
Регистрация: 26.01.2018
Сообщений: 180
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
сортирует
согласна, сортирует, но как мне осуществить немного другую сортировку? не по цифрам, а по числам целиком (то есть М8, М10, а не наоборот?)?
Etsareva вне форума Ответить с цитированием
Старый 01.02.2018, 10:36   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Etsareva Посмотреть сообщение
согласна, сортирует, но как мне осуществить немного другую сортировку? не по цифрам, а по числам целиком (то есть М8, М10, а не наоборот?)?
см. пост #7
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.02.2018, 10:48   #15
Etsareva
Форумчанин
 
Регистрация: 26.01.2018
Сообщений: 180
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
см. пост #7
спасибо! я поняла все.
Etsareva вне форума Ответить с цитированием
Старый 08.02.2018, 10:12   #16
Etsareva
Форумчанин
 
Регистрация: 26.01.2018
Сообщений: 180
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
сколько записей возвращает запрос вида
Код:
SELECT MARK from ВашаТАблица GROUP BY MARK;
- 10605 строк.

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
и там есть строчки, где в начале НЕ "М" ?
есть, например:
С2-33-0,25-412 Ом ± 1 %-А-Г- В
590КН5
К50-68-25 В-100 мкФ (+50;-10)% И В и тд.
Etsareva вне форума Ответить с цитированием
Старый 08.02.2018, 10:50   #17
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Etsareva Посмотреть сообщение
есть, например:
С2-33-0,25-412 Ом ± 1 %-А-Г- В
590КН5
К50-68-25 В-100 мкФ (+50;-10)% И В и тд.
ну вот и ответ на ваш вопрос -
Цитата:
Сообщение от Etsareva Посмотреть сообщение
но как мне осуществить немного другую сортировку? не по цифрам, а по числам целиком (то есть М8, М10, а не наоборот?)?
ответ - "Никак".
потому что Вы не сможете объяснить, по каким "числам целиком" надо сортировать, эти строчки.

поэтому сортируйте как строки.
а для удобства пользователя должна быть фильтрация + поиск.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.02.2018, 11:07   #18
Etsareva
Форумчанин
 
Регистрация: 26.01.2018
Сообщений: 180
По умолчанию

а, может быть, возможно сделать сортировку внутри дерева treeview?
Изображения
Тип файла: png Безымянный.png (57.3 Кб, 70 просмотров)
Etsareva вне форума Ответить с цитированием
Старый 08.02.2018, 11:10   #19
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Возможно, но каждую группу с однотипными марками придется сортировать по своему алгоритму
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.02.2018, 11:13   #20
Etsareva
Форумчанин
 
Регистрация: 26.01.2018
Сообщений: 180
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
сортировать по своему алгоритму
поняла, спасибо! а можно где-нибудь пример посмотреть, в чего начать мне?
Etsareva вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка Treeview BenZeR C# (си шарп) 0 18.05.2013 22:11
Сортировка строки символов. TreeView novicepro Помощь студентам 0 08.03.2013 20:13
ASP.NET C# компонент TreeView. Перетащить какой - либо пункт меню из TreeView в TextBox Claster ASP.NET 0 02.01.2013 18:59
Сортировка TreeView из программы Pavel229 Компоненты Delphi 2 12.01.2011 15:19
Сортировка узлов дерева treeview gool Общие вопросы Delphi 1 06.11.2009 09:20