Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lazarus
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
mr-anri
0 / 0 / 1
Регистрация: 16.12.2013
Сообщений: 41
1

Проверка на повтор в StringGrid

22.10.2014, 21:09. Просмотров 736. Ответов 5
Метки нет (Все метки)

вторая тема за сегодня, надеюсь это не запрещено. Если по делу. нужно реализовать функцию проверки на повторение значений во втором столбце таблицы представленной в stringgrid

попытался сделать такой цикл
Delphi
1
2
3
4
5
6
7
 for m:= 1 to StringGrid1.RowCount - 1 do
        begin
    if StrToInt(StringGrid2.Cells[m,2])=StrToInt(StringGrid2.Cells[m,2]) then
    begin
    ShowMessage('значение введеного кода повторяется');
    end;
    end;
но я прекрасно понимаю что он будет проверять и то значение что мы только что ввели, как сделать проверку со всеми предыдущими элементами но не с тем что мы сейчас вводим? так же я понимаю что нужно организовать цикл по ячейкам этого столбца и если будет найдено совпадение то выводить сообщение. вроде цикл сделал, вывод сообщения тоже. вобщем пожалуйста подскажите как довести эту идею до работоспособности?

Добавлено через 8 минут
нашел у себя ошибки, в этом фрагменте кода исправил, однако нужного результата так и не добился
Delphi
1
2
3
4
5
6
7
for m:= 2 to StringGrid1.RowCount - 1 do
       begin
   if StrToInt(StringGrid2.Cells[2,m])=StrToInt(StringGrid2.Cells[2,RowCount - 1]) then
   begin
   ShowMessage('значение введеного кода повторяется');
   end;
   end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2014, 21:09
Ответы с готовыми решениями:

Перемещение картинок по форме (не повтор)
Всем добрый день. В общем проблема такая: Требуется поместить на форму...

Проверка вводимых данных на повтор
Есть таблица. В одном из столбцов вводятся адреса сайтов. Как прописать...

Проверка input на повтор его value
Каждый раз при вызове ф-ции создается input. Имеющий в своем value...

Проверка на повтор при записи в файл
Уважаемые, нужна помощь!!Суть вот в чём, в файл записываются данные(символы,...

"Крестики-Нолики": проверка на повтор знака
Помогите сделать проверку повтора знака #include <iostream> #include <locale>...

5
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26110 / 17509 / 6944
Регистрация: 22.10.2011
Сообщений: 30,841
Записей в блоге: 6
22.10.2014, 21:32 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
var L : TStringList;
begin
  L := TStringList.Create;
  L.AddStrings(StringGrid1.Cols[2]);
  // Удаляем из списка ту строку грида, в которую вводится значение, которое надо сравнить с остальными
  L.Delete(StringGrid1.Row); 
 
  // В оставшихся строках ищем совпадения
  if L.IndexOf(Edit1.Text) >= 0 then // или L.IndexOf(StringGrid1.Cells[2, StringGrid1.Row]) >= 0
    ShowMessage('Введенное значение повторяется');
  L.Free;
end;
, например
0
mr-anri
0 / 0 / 1
Регистрация: 16.12.2013
Сообщений: 41
22.10.2014, 21:44  [ТС] 3
спасибо за ответ но не работает. объясняю. мне кажется допущенна ошибка в колонках,их всего 2 а следовательно нужно написать (или я ошибаюсь) ибо иначе вылезает ошибка
Delphi
1
2
3
4
5
6
7
8
9
10
L := TStringList.Create;
  L.AddStrings(StringGrid2.Cols[1]);
  // Удаляем из списка ту строку грида, в которую вводится значение, которое надо сравнить с остальными
  L.Delete(StringGrid2.Row);
 
  // В оставшихся строках ищем совпадения
  if L.IndexOf(StringGrid2.Cells[1, StringGrid2.Row]) >= 0 then // или L.IndexOf(StringGrid1.Cells[2, StringGrid1.Row]) >= 0
    ShowMessage('Введенное значение повторяется');
  L.Free;
end;
однако теперь вылезает сообщение всегда, при нажатии на кнопку, вне зависимости от того повторяются значения или нет.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26110 / 17509 / 6944
Регистрация: 22.10.2011
Сообщений: 30,841
Записей в блоге: 6
23.10.2014, 00:10 4
Я тестировал, нормально работает. При нажатии на кнопку проверяется значение, введенное в Edit, и, если все нормально - то оно заносится в выбранную ячейку. Если у тебя сделано как-то по-другому - значит, допиливай к своим реалиям...
0
mr-anri
0 / 0 / 1
Регистрация: 16.12.2013
Сообщений: 41
23.10.2014, 00:54  [ТС] 5
сделал под себя, что бы работало так как мне надо пришлось удалить строчку
Delphi
1
 L.Delete(StringGrid2.Row);
либо я неясно выразился либо вы меня не правильно поняли. в любом случае спасибо огромное, буду изучать что вы вообще мне тут написали...надо вникнуть в суть, что бы в дальнейшем мог сам до такого додуматься
0
Puporev
Модератор
54586 / 42092 / 29061
Регистрация: 18.05.2008
Сообщений: 99,292
23.10.2014, 09:13 6
Чисто поправленный код ТС.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
k:=0;
m:=2;
while(m<=StringGrid1.RowCount - 2)and(k=0) do
 begin
  n:=m+1;
  while(n<=StringGrid1.RowCount - 1)and(k=0) do
  if StrToInt(StringGrid2.Cells[2,m])=StrToInt(StringGrid2.Cells[2,n]) then k:=1
  else inc(n);
  if k=0 then inc(m);
 end;
if k=1 then
 begin
   ShowMessage('значение введенного кода повторяется');
   exit
 end;
0
23.10.2014, 09:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2014, 09:13

Проверка ввода в StringGrid
Здавствуйте, подскажите в чем проблема, в общем суть такая, проверять клавиши...

Проверка значений в StringGrid
Необходимо сделать проверку в ячейках Stringgrid. Если введено значение...

StringGrid и проверка на буквы
Здравствуйте все.. У меня проблема. У меня задание: надо зделать таблицу, в...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru