Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
322 / 264 / 109
Регистрация: 07.04.2011
Сообщений: 1,526
1

Проверка данных в стринггриде

25.07.2012, 11:08. Показов 1283. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток.
Для проверки данных в стринггрид используется такая процедура:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
procedure clearcell(SG:TStringGrid;StatusBar:TStatusBar;var error:boolean);//проверка пустых ячеек
var i,j:integer;
s1,s2:string;
begin
  for j:=1 to SG.RowCount-1 do
  for i:=1 to 3 do
  begin
    error:=false;
    s1:=SG.Cells[1,j];
    s2:=SG.Cells[2,j];
     if SG.Cells[i,j]='' then
    begin
      SG.Row:=j;
      SG.Col:=i;
      SG.SetFocus;
      StatusBar.Panels[2].Text:='Ячейка под номером : '+'['+IntToStr(i+1)+','+IntToStr(j)+']'+' не содержит данных';
      error:=true;
      exit;
    end;
 
    if (s2=s1) then
    begin
      SG.Row:=j;
      SG.Col:=2;
      SG.SetFocus;
      StatusBar.Panels[2].Text:='Строка под номером : '+IntToStr(j)+
      ' - начальное и конечное события совпадают';
      error:=true;
      ShowMessage('Начальное и конечное события совпадают');
      Exit;
    end;
 
    if (s2<s1) then
    begin
      SG.Row:=j;
      SG.Col:=2;
      SG.SetFocus;
      StatusBar.Panels[2].Text:='Строка под номером : '+IntToStr(j)+
      ' - конечное событие меньше начального';
      error:=true;
      ShowMessage('Конечное событие меньше начального');
      Exit;
    end;
  end;
end;
Вызов осуществляется так:
Delphi
1
clearcell(SG1,StatusBar1,error);//проверка ячеек
Проблема в том,что необходимо сначала проверять на пустые ячейки,а потом только на совпадение значений.
Например:Запускаю программу и пытаюсь выполнить расчеты.При нажатии на кнопку проверка первой ячейки срабатывает корректно.На нее устанавливается фокус,и в статус бар выдается сообщение что данная ячейка не содержит данных.Следующую ячейку еще не заполнял.Еще раз нажимаю на кнопку и выдается сообщение что конечное событие меньше начального.Хотя вторая ячейка пустая.Ну это понятно,что будет данное сообщение,так как данные в ячейке действительно меньше,чем в предыдущей.
Помогите исправить код так,чтоб проверялись сначала пустые ячейки,а потом только на совпадение данных в 2 ячейках.Если 1 ячейка пустая,то на нее устанавливается фокус.Если вторая пустая,то на нее устанавливается фокус.А не так, чтоб сравнивалось содержимое 2 ячеек.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2012, 11:08
Ответы с готовыми решениями:

Ввод текста в СтрингГриде
Подскажите пожалуйста, как вводить данные в заголовочные ячейки (fixdecol &amp; fixedrow) компонента...

открыть файл и показать в стринггриде
var f: textfile; n,m,i,j:integer; s:string; begin if OpenDialog1.Execute then begin ...

Уменьшение размера курсора в стринггриде
Всем доброго времени суток.Столкнулся с такой проблемой.В стринггриде выставляю значение...

Ограничить в СтрингГриде кол-во символов
Как ограничить количество символов вводимых в одну ячейку стринггрида до двух символов.

3
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
25.07.2012, 11:50 2
Попробуйте так.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
procedure clearcell(SG:TStringGrid;StatusBar:TStatusBar;var error:boolean);//проверка пустых ячеек
var i,j:integer;
s1,s2:string;
begin
  for j:=1 to SG.RowCount-1 do
   begin
    error:=false;
    i:=1;
    while(i<=3)and not error do
    if SG.Cells[i,j]='' then error:=true
    else inc(i);
    if error then //если есть пусиая ячейка
     begin
      SG.Row:=j;
      SG.Col:=i;
      SG.SetFocus;
      StatusBar.Panels[2].Text:='Ячейка под номером : '+'['+IntToStr(i+1)+','+
                                 IntToStr(j)+']'+' не содержит данных';
      exit;
     end;
    //если нет пустых ячеек, продолжаем
    s1:=SG.Cells[1,j];
    s2:=SG.Cells[2,j];
    if (s2=s1) then //если совпадают
     begin
      SG.Row:=j;
      SG.Col:=2;
      SG.SetFocus;
      StatusBar.Panels[2].Text:='Строка под номером : '+IntToStr(j)+
      ' - начальное и конечное события совпадают';
      error:=true;
      ShowMessage('Начальное и конечное события совпадают');
      Exit;
    end;
    //если не совпадают, продолжим
    if (s2<s1) then
    begin
      SG.Row:=j;
      SG.Col:=2;
      SG.SetFocus;
      StatusBar.Panels[2].Text:='Строка под номером : '+IntToStr(j)+
      ' - конечное событие меньше начального';
      error:=true;
      ShowMessage('Конечное событие меньше начального');
      Exit;
    end;
  end;
end;
1
322 / 264 / 109
Регистрация: 07.04.2011
Сообщений: 1,526
25.07.2012, 11:58  [ТС] 3
Спасибо!У меня выходит цикл по столбцам неверно обрабатывался.
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
25.07.2012, 12:00 4
Просто нужно проверять построчно, сначала 1 условие, если нет пустых, то второе и третье.
1
25.07.2012, 12:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.07.2012, 12:00
Помогаю со студенческими работами здесь

Максимальный и минимальный элемент в стринггриде
Доброго времени суток! Есть StringGrid в который вводятся с клавиатуры числа. Нужно найти...

Как скрыть колонки в стринггриде?
Всем привет! :senor: задача бональна - ну я чет немогу ее решить. надеюсь общими мыслями найти...

Алгоритм для ромба в стринггриде
Есть stringgrid, 2 edit и кнопка ввожу я в edit номер строки и номер столбца. Нажимаю на кнопку и...

Не уменьшается количество строк в стринггриде
День добрый. Есть две формы. На первой вычисляются данные и заполняется стринггрид. На второй...

как умножить яйчейку на яйчеку в стринггриде?
Из-за малого опыта работы со стринггридом незнаю как умножить одну яйчейку на другую....

Удалить номер строки и столбца в СтрингГриде
Подскажите, как удалить не только значения в стринггриде, но и номер строки и столбца


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru