Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.12.2011, 14:39
XANDER2011 XANDER2011 вне форума
Прохожий
 
Регистрация: 08.12.2011
Сообщения: 3
Репутация: 10
По умолчанию datetimepicker+stringgrid выборка дат

Всем доброго времени суток! Помогите решить проблему:
Есть 2 формы - на одной заполненный грид, на второй грид и 2 datetimepicker для указания периода. По нажатию кнопки на форме №2 значение ячеек 12-го столбца грида формы №1 проверяется условием – если значение ячейки больше или равно значению пикера №1 и не больше значения пикера №2, то тогда вся строка переносится в грид №2. НО при нажатии на кнопку ничего не происходит.
Возможно в коде я «хомутнул», но никак не могу найти где именно…
Код:
var
  Form18: TForm18;
     t1,t3,x,y,temp,k,k1,k3,c,row: integer;
     t2,t4,tempstr,f,f1,f2: string;
     i, j: Integer;
implementation
......
procedure TForm18.Button1Click(Sender: TObject);
begin
f:=datetostr(form18.DateTimePicker1.Date);
f1:=datetostr(form18.DateTimePicker2.date);
form18.sg1.RowCount:=2;
for k:=2 to form4.sg1.RowCount do
for k1:=12 to form18.sg1.RowCount do k3:=2;
for k:=2 to form18.sg1.RowCount do
//вариант проверки на соответствие №1
if form18.DateTimePicker1.Date=strtodate(form4.sg1.Cells[12,k])then
if form18.DateTimePicker2.date=strtodate(form4.sg1.Cells[12,k]) then
//вариант проверки на соответствие №2
{if datetostr(form18.DateTimePicker1.Date)>=form4.sg1.Cells[12,k] then
if datetostr(form18.DateTimePicker2.date)<form4.sg1.Cells[12,k] then}
//вариант проверки на соответствие №3
{if f>=form4.sg1.Cells[12,k] then
if f1<form4.sg1.Cells[12,k] then}
begin
k3:=k3+1;
for k1:=12 to form18.sg1.RowCount do begin //c:=1;
form18.sg1.Cells[k1,k3]:=form4.sg1.Cells[k1,k];
end;
form18.sg1.RowCount:=form18.sg1.RowCount+1;
end;
Прошу помощи
Ответить с цитированием
  #2  
Старый 08.12.2011, 15:03
freedomman freedomman вне форума
Новичок
 
Регистрация: 12.10.2011
Сообщения: 51
Репутация: 10
По умолчанию

Код:
if ((form18.DateTimePicker1.Date)>=strtodate(form4.sg1.Cells[12,k]) and (form18.DateTimePicker2.Date<=strtodate(form4.sg1.Cells[12,k])))
then 
begin
k3:=k3+1;
for k1:=12 to form18.sg1.RowCount do begin //c:=1;
form18.sg1.Cells[k1,k3]:=form4.sg1.Cells[k1,k];
end;
Ответить с цитированием
  #3  
Старый 08.12.2011, 15:29
XANDER2011 XANDER2011 вне форума
Прохожий
 
Регистрация: 08.12.2011
Сообщения: 3
Репутация: 10
По умолчанию

Цитата:
Сообщение от freedomman
Код:
if ((form18.DateTimePicker1.Date)>=strtodate(form4.sg1.Cells[12,k]) and (form18.DateTimePicker2.Date<=strtodate(form4.sg1.Cells[12,k])))
then 
begin
k3:=k3+1;
for k1:=12 to form18.sg1.RowCount do begin //c:=1;
form18.sg1.Cells[k1,k3]:=form4.sg1.Cells[k1,k];
end;

пишет ошибку
[Error] Unit18.pas(77): Operator not applicable to this operand type
Ответить с цитированием
  #4  
Старый 08.12.2011, 15:47
freedomman freedomman вне форума
Новичок
 
Регистрация: 12.10.2011
Сообщения: 51
Репутация: 10
По умолчанию

не проверял но должно работать
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i ,r,j:integer;
begin
StringGrid2.RowCount:=2;
r:=1;
for i:=1 To StringGrid1.RowCount do begin]
if (datetostr(StringGrid1.Cells[12,i])>=DateTimePicker1.date)
and  (datetostr(StringGrid1.Cells[12,i])<=DateTimePicker1.date)
then  begin
for j:=0 to StringGrid2.ColCount do
StringGrid2.Cells[j,r]:=StringGrid1.Cells[j,i];
inc(r);
StringGrid2.RowCount:=StringGrid2.RowCount+1;
end;
end;

Последний раз редактировалось freedomman, 08.12.2011 в 15:50.
Ответить с цитированием
  #5  
Старый 08.12.2011, 16:06
XANDER2011 XANDER2011 вне форума
Прохожий
 
Регистрация: 08.12.2011
Сообщения: 3
Репутация: 10
По умолчанию

Цитата:
Сообщение от freedomman
не проверял но должно работать
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i ,r,j:integer;
begin
StringGrid2.RowCount:=2;
r:=1;
for i:=1 To StringGrid1.RowCount do begin]
if (datetostr(StringGrid1.Cells[12,i])>=DateTimePicker1.date)
and  (datetostr(StringGrid1.Cells[12,i])<=DateTimePicker1.date)
then  begin
for j:=0 to StringGrid2.ColCount do
StringGrid2.Cells[j,r]:=StringGrid1.Cells[j,i];
inc(r);
StringGrid2.RowCount:=StringGrid2.RowCount+1;
end;
end;
вот немного поигрался с кодом - вот что получилось
Код:
procedure TForm18.Button1Click(Sender: TObject);
begin
form18.sg1.RowCount:=2;
r:=1;
for i:=1 To form4.sg1.RowCount do begin
if (strtodate(form4.sg1.Cells[12,i])>=form18.DateTimePicker1.date)
and  (strtodate(form4.sg1.Cells[12,i])<=form18.DateTimePicker2.date)
then  begin
for j:=0 to form4.sg1.ColCount do
form18.sg1.Cells[j,r]:=form4.sg1.Cells[j,i];
inc(r);
form18.sg1.RowCount:=form18.sg1.RowCount+1;
end;
end;
end;
Спасибо за помощь!
Единственное НО - выкидывает окно с ошибкой - '' is not valid date - хотя я все пустые строки из первого грида убрал
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:58.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter