Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Таблица StringGrid


Автор: faithless 13.7.2007, 15:50
Подскажите, пожалуйста, как можно сделать так, чтобы выдавалась ошибка если в StringGrid есть незаполненные поля???   smile 

for(int i=1;i<3;i++)
        for(int j=1;j<=StringGrid1->RowCount;j++)
                if(StringGrid1->Cells[i][j]=="") 
                       {
                       Form3->Visible=false;
                       Form2->Show(); }
                else
                        ShowMessage("Ошибка!");

Автор: _hunter 13.7.2007, 15:58
написать наоборот?
if(StringGrid1->Cells[i][j]=="") 
    ShowMessage("Ошибка!");
else
{
    Form3->Visible=false;
    Form2->Show();
}


Автор: faithless 13.7.2007, 16:00
тоже пробовала. Думаю что он не правильно понимает " ". Можно как то по другому задать что поле пустое???

Автор: Rodman 13.7.2007, 16:01
Код

    for(int i=1;i<3;i++)
        for(int j=1;j<=StringGrid1->RowCount;j++)
                if(StringGrid1->Cells[i][j].Length()==0)//пустая ячейка
                       {
                         ShowMessage("Ошибка!");
                         Form3->Visible=false;
                         Form2->Show();
                       }
                else
                        ShowMessage("не Ошибка!");

это имелось ввиду?!

Автор: faithless 13.7.2007, 16:08
Можно ли как то сделать чтобы ошибка выдавалась только один раз?

Автор: Rodman 13.7.2007, 16:09
то что должно происходить в условии, не знаю, то само условие проверь!

Цитата(faithless @  13.7.2007,  15:08 Найти цитируемый пост)
Можно ли как то сделать чтобы ошибка выдавалась только один раз? 

Код

    BOOL isit=False;
    for(int i=1;i<3;i++)
        for(int j=1;j<=StringGrid1->RowCount;j++)
                if(StringGrid1->Cells[i][j].Length()==0)//длина строки в ячейке равна 0
                          isit=True;
    if(isit==True)
        ShowMessage("Ашыпка!"); //;)
    else
        ShowMessage("не Ошибка!");


ЗЫ: _hunter, ну что за пример для молодежи?!

Автор: faithless 13.7.2007, 16:38
Очень странно, но теперь он всегда выдает Ашыпка, не зависимо от того заполнены поля или нет  

Автор: Rodman 13.7.2007, 16:42
faithless, покажи код... как ты заполняешь грид!


Код

        BOOL isit=False;
    for(int i=1;i<=StringGrid1->ColCount;i++)
        for(int j=1;j<=StringGrid1->RowCount;j++)
                StringGrid1->Cells[i][j]=IntToStr(i*j);
   for(int i=1;i<=StringGrid1->ColCount;i++)
        for(int j=1;j<=StringGrid1->RowCount;j++)
                if(StringGrid1->Cells[i][j].Length()==0)//длина строки в ячейке равна 0
                          isit=True;
    if(isit==True)
        ShowMessage("Ашыпка!"); //;)
    else
        ShowMessage("не Ошибка!");

вот у меня все нормально выдает - "не Ошибка!"

Автор: faithless 13.7.2007, 16:52
void __fastcall TForm3::FormCreate(TObject *Sender)
{
StringGrid1->Cells[0][0]="выа";
StringGrid1->Cells[1][0]="ваыа";
StringGrid1->Cells[2][0]="авол";
StringGrid1->Cells[0][1]="1";
}

Автор: Rodman 13.7.2007, 16:53
faithless, пользуйся кнопкой "Код"!

ну это не пример! по твоему примеру не заполнены все ячейки!

вот например, где StringGrid1->Cells[0][2], StringGrid1->Cells[0][3]???

Добавлено через 1 минуту и 5 секунд
а если ты заполняешь вручную, то проверяй пошагово!

и помни, что ячейки начинаются с 0! а в цикле у тебя с 1...

Автор: faithless 13.7.2007, 16:55
они должны заполняться при запуске.

Добавлено через 2 минуты и 46 секунд
Можешь показать как проверить пошагово? 

Автор: Rodman 13.7.2007, 16:58
лопустим число столбцов 3, а строк 2!
Код

        BOOL isit=False;
   StringGrid1->Cells[0][0]="1";
   StringGrid1->Cells[1][0]="ваыа";
   StringGrid1->Cells[2][0]="авол";
   StringGrid1->Cells[0][1]="2";
   StringGrid1->Cells[1][1]="выа";
   StringGrid1->Cells[2][1]="ваыа";
   for(int i=1;i<=StringGrid1->ColCount;i++)
        for(int j=1;j<=StringGrid1->RowCount;j++)
                if(StringGrid1->Cells[i][j].Length()==0)//длина строки в ячейке равна 0
                          isit=True;
    if(isit==True)
        ShowMessage("Ашыпка!"); //;)
    else
        ShowMessage("не Ошибка!");


проверь!

Автор: faithless 13.7.2007, 17:06
Проблема в том что у меня нет определенного числа строк. Их можно как добавлять так и удалять (уже после запуска программы). и поля я заполняю во время работы.   

Автор: MODE 13.7.2007, 17:27
А а просто проверять перед внесением данных в таблицу нельзя ????
У тебя как организован ввод данных 

Типа защита от дурака  smile

Код



  AnsiSting text;
  
  text = StringGrid1->Cells[i][j]
  
  if (text.Length()==0) 

      ShowMessage("Не верный ввод данных");
  
  else
      
      StringGrid1->Cells[i][j] = text;

 


Автор: Rodman 16.7.2007, 09:28
Цитата(faithless @  13.7.2007,  16:06 Найти цитируемый пост)
Проблема в том что у меня нет определенного числа строк. Их можно как добавлять так и удалять (уже после запуска программы). и поля я заполняю во время работы.    

Код

   for(int i=1;i<=StringGrid1->ColCount;i++) //StringGrid1->ColCount выдает кол-во столбцов
        for(int j=1;j<=StringGrid1->RowCount;j++)//StringGrid1->RowCount выдает кол-во строк

так что при проверке будут проверены все ячейки.. сколько бы их там не было!

Автор: ksili 16.7.2007, 09:58
Чтобы только один раз выводилась "Ашипка", можно вместо
Код

ShowMessage("Ашыпка!");

поставить
Код

{
ShowMessage("Ашыпка!");
break;
}

Автор: faithless 17.7.2007, 17:23
спасибо большое за помощь. у меня наконец-то все получилось  smile 

int r=0;
for(int i=1;i<3;i++)
        for(int j=1;j<StringGrid1->RowCount;j++)
                if (StringGrid1->Cells[i][j].Length()==0){
                        r=1;
                        break;
                        }
                        if (r==1){
                        ShowMessage("Ошибка! Заполнены не все поля.");
                        return;}
                     else{
        Form3->Visible=false;
        Form2->Show(); }

оказывается ошибка была в том что вместо < было <= for(int j=1;j<StringGrid1->RowCount;j++). теперь все рабоает как надо smile 

Автор: XPyCT 25.8.2007, 15:30
я дико извеняюсь  но в билдере есть такое метод как  " IsEmpty()"
если прописать этот код на  событие он клик то 
при щелчке мыши на пустой ячейке выйдет сообщение
о необходимости заполнения поля

Код

int sovp=0;

//StringGrid1->Col ->Это номер активной колонки где находится курсор
//StringGrid1->Row->Это номер активного ряда где находится курсор

if(StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row].IsEmpty())
   {
      ShowMessage("Не заполнена ечейка");
      StringGrid1->Options<<goEditing;
      StringGrid1->SetFocus();
      sovp++;
   }


      


не судите строго новичка 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)