Консультация № 199802
07.12.2020, 12:30
0.00 руб.
1 1 1
Здравствуйте! Прошу помощи в следующем вопросе:
Есть таблица stringgrid, помогите сделать сортировку. Выдать список по заданной пользователем стране и количеству дней выше введенных пользователем, отсортированный по сумма к оплате.

Delphi
Прикрепленные файлы:
2e34f105f2a92a68a0068cd8289272d47745ef1a.png

Обсуждение

давно
Старший Модератор
31795
6196
08.12.2020, 14:25
общий
это ответ
Здравствуйте, Ericsson!

Код Delphi 6:
Код:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;

type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
ComboBox1: TComboBox;
Edit1: TEdit;
StringGrid2: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
ListData:TStringList;
ChangeBox,ChangeEdit:boolean;
procedure SortGrid;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.SortGrid;
var
a,b,c:integer;
d:string;
begin
a:=StrToInt(Form1.Edit1.Text);
Form1.StringGrid1.Visible:=false;
Form1.StringGrid2.Top:=Form1.StringGrid1.Top;
Form1.StringGrid2.Left:=Form1.StringGrid1.Left;
Form1.StringGrid2.Width:=Form1.StringGrid1.Width;
Form1.StringGrid2.Height:=Form1.StringGrid1.Height;
Form1.StringGrid2.ColCount:=Form1.StringGrid1.ColCount;
Form1.StringGrid2.RowCount:=0;
for c:=1 to Form1.StringGrid1.RowCount-1 do
begin
if(Form1.StringGrid1.Cells[2,c]=Form1.ComboBox1.Items[Form1.ComboBox1.ItemIndex])and
(a<=StrToInt(Form1.StringGrid1.Cells[3,c])) then
begin
Form1.StringGrid2.RowCount:=Form1.StringGrid2.RowCount+1;
for b:=0 to form1.StringGrid1.ColCount-1 do
Form1.StringGrid2.Cells[b,Form1.StringGrid2.RowCount-1]:=Form1.StringGrid1.Cells[b,c];
end;
end;
Form1.StringGrid2.Visible:=true;
ShowMessage('sorting');
for a:=1 to Form1.StringGrid2.RowCount-2do
for b:=a+1 to Form1.StringGrid2.RowCount-1do
if StrToFloat(Form1.StringGrid2.Cells[8,a])<StrToFloat(Form1.StringGrid2.Cells[8,b])then
for c:=0 to Form1.StringGrid2.ColCount-1 do
begin
d:=Form1.StringGrid2.Cells[c,a];
Form1.StringGrid2.Cells[c,a]:=Form1.StringGrid2.Cells[c,b];
Form1.StringGrid2.Cells[c,b]:=d;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
a:double;
i,j:integer;
s:string;
begin
s:='D:\CAT\_my\201207.txt';
ListData:=Tstringlist.Create;
ListData.Clear;
ListData.Sorted:=false;
ListData.LoadFromFile(s);
Form1.StringGrid1.RowCount:=ListData.Count+1;
Form1.StringGrid1.Visible:=false;
Form1.StringGrid2.Visible:=false;
for i:=0 to ListData.Count-1 do
begin
s:=ListData.Strings[i]+' ';
j:=0;
while length(s)>0 do
begin
while s[1]=' 'do delete(s,1,1);
Form1.StringGrid1.Cells[j,i+1]:=copy(s,1,pos(' ',s)-1);
delete(s,1,pos(' ',s));
inc(j);
end;
a:=StrToInt(Form1.StringGrid1.Cells[3,i+1])*
(StrToInt(Form1.StringGrid1.Cells[5,i+1])*StrToInt(Form1.StringGrid1.Cells[7,i+1])+
0.7*StrToInt(Form1.StringGrid1.Cells[6,i+1])*StrToInt(Form1.StringGrid1.Cells[7,i+1])
);
Form1.StringGrid1.Cells[8,i+1]:=Format('%f',[a]);
end;
ListData.Clear;
Form1.StringGrid1.Visible:=true;
ListData.Sorted:=true;
for i:=1 to Form1.StringGrid1.RowCount-1 do
if not ListData.Find(Form1.StringGrid1.Cells[2,i],j) then
ListData.Add(Form1.StringGrid1.Cells[2,i]);
Form1.ComboBox1.Items.BeginUpdate;
Form1.ComboBox1.Clear;
Form1.ComboBox1.Items.AddStrings(ListData);
Form1.ComboBox1.Items.EndUpdate;
ListData.Free;
Form1.ChangeBox:=false;
Form1.ChangeEdit:=false;
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
if ChangeEdit then SortGrid else ChangeBox:=true;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
if ChangeBox then SortGrid else ChangeEdit:=true;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not( Key in ['0'..'9',#13] )then Key:=#0;
end;
end.


Содержимое базы данных:
Цитата: 201207.txt
1 101 Россия 4 Иванов 1 0 5000
2 102 Россия 5 Пертров 2 1 4500
3 103 Япония 10 Сидоров 3 1 3000
4 104 Турция 8 Журавлев 4 1 2000
5 105 Турция 7 Попов 5 2 2500
6 106 Турция 6 Сидоров 3 1 3500
7 107 Чехия 9 Попов 1 1 4500
8 108 Чехия 5 Иванов 2 2 5500
9 109 Нигерия 11 Петров 3 1 6000
10 110 Япония 5 Иванов 1 1 2000
11 111 Япония 21 Пертров 2 2 2500
12 112 Китай 2 Сидоров 3 1 3500
13 113 Нигерия 5 Журавлев 1 1 6500
14 114 Россия 4 Попов 2 2 5500


Удачи!
5
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа