C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
StringGrid, удаление строки
Инна
Отправлено: 17.11.2005, 14:30


Не зарегистрирован







Подскажите как правильно удалить строку с известным ее номером из StringGrid и как можно удалить в цикле все строки StringGrid?
Спасибо.
Guest
Отправлено: 17.11.2005, 15:10


Не зарегистрирован







2) StringGrid->RowCount = 0; // 1 ...;

1) ??? поднять "хвост" на 1 строку и RowCount--
Инна
Отправлено: 17.11.2005, 15:50


Не зарегистрирован







Пытаюсь убрать все записи, в которых во второй колонке пусто. Как правильно поднять записи?
int u = Form1->StringGrid1->RowCount;
for (int i = 0; i {
if(Form1->StringGrid1->Cells[1][i] == "")
Form1->StringGrid1->RowCount = Form1->StringGrid1->RowCount-1;
}
Инна
Отправлено: 17.11.2005, 15:51


Не зарегистрирован







Пытаюсь убрать все записи, в которых во второй колонке пусто. Как правильно поднять записи?
int u = Form1->StringGrid1->RowCount;
for (int i = 0; i {
if(Form1->StringGrid1->Cells[1][i] == "")
Form1->StringGrid1->RowCount = Form1->StringGrid1->RowCount-1;
}
Инна
Отправлено: 17.11.2005, 16:56


Не зарегистрирован







СтрингГрид состоит из двух колонок. Во второй колонке есть пустые ячейки. Строки в которых присутствуют пустые значения во второй колонке надо убрать из СтрингГрид. Код выше с этим не справляется. Остаются пустые строки во второй колонке.
Еще подскажите: при старте приложения всегда выделена первая ячейка в первой колонке СтрингГрида, как сделать, чтобы этого выделения не было. И как менять размеры колонок, установила goColSizing в true, но поменять размер колонок не удается курсором мыши.
У меня СтрингГрид без фиксированных колонок и строк.
CODE

int yborka = Form1->StringGrid1->RowCount;
int yborka2 = Form1->StringGrid1->RowCount;
for (int i = 0; i<yborka; i++)
{
if(Form1->StringGrid1->Cells[1][i] == "")
   {
     for (int i = 0; i<yborka2; i++)
        {
        Form1->StringGrid1->Cells[0][i]=Form1->StringGrid1->Cells[0][i+1];
        Form1->StringGrid1->Cells[1][i]=Form1->StringGrid1->Cells[1][i+1];
        }
   Form1->StringGrid1->RowCount = Form1->StringGrid1->RowCount-1;
   }
}

gvg
Отправлено: 17.11.2005, 17:25


Машинист паровоза

Группа: Участник
Сообщений: 222



CODE

 for( int i = 0; i < SG->RowCount — 1; i++ )
 {
   if( SG->Cells[1][i] == "" )
   {
     for( int j = i; j < SG->RowCount — 1; j++ )
     {
       SG->Cells[1][j] = SG->Cells[1][j+1];
       SG->Cells[2][j] = SG->Cells[2][j+1];
     }
     SG->RowCount = SG->RowCount — 1;
   }
   //SG->Update();
 }

А вот во вложенных циклах (у Вас) одноименное i использовать не рекомендую — запутаетесь
Инна
Отправлено: 17.11.2005, 17:48


Не зарегистрирован







Почему-то не работает. Пустышки во второй колонке остаются, а в первой все смещается неправильно. smile.gif
gvg
Отправлено: 17.11.2005, 17:54


Машинист паровоза

Группа: Участник
Сообщений: 222



CODE

 for( int i = 0; i < SG->RowCount; i++ )
 {
   if( SG->Cells[1][i] == "" )
   {
     for( int j = i; j < SG->RowCount — 1; j++ )
     {
       SG->Cells[1][j] = SG->Cells[1][j+1];
       SG->Cells[0][j] = SG->Cells[0][j+1];
     }
     SG->RowCount = SG->RowCount — 1;
   }
 }

Индекс перепутал (надо было 0 вместо 2). И в первом цикле условие поправить. Вообще, сами поправили бы :-)
Инна
Отправлено: 17.11.2005, 18:02


Не зарегистрирован







Я пробывала исправить, smile.gif но сейчас тоже не работает. sad.gif
GIZMO
Отправлено: 17.11.2005, 19:56


Машинист паровоза

Группа: Участник
Сообщений: 174



QUOTE (Инна @ 17/11/2005, 14:30)
Подскажите как правильно удалить строку с известным ее номером из StringGrid и как можно удалить в цикле все строки StringGrid?
Спасибо.

Сюда:
https://rxlib.ru/forums/index.php?s=...&act=Search&f=3

результат:
https://rxlib.ru/forums/index.php?ac...76b4fe294f26c0d

seg_r
Отправлено: 17.11.2005, 20:27


Дежурный стрелочник

Группа: Участник
Сообщений: 74



вырезка из моей проги :

CODE

void SortSGF1(void)
{

for (int i=0;i<=Form1->StringGrid1->RowCount;i++)
 {

  if (Form1->StringGrid1->Cells[0][i]==".")
   if (Form1->StringGrid1->Cells[1][i]==".")
    if (Form1->StringGrid1->Cells[2][i]==".")
     if (Form1->StringGrid1->Cells[3][i]==".")
      if (Form1->StringGrid1->Cells[4][i]==".")
       if (Form1->StringGrid1->Cells[5][i]==".")
        if (Form1->StringGrid1->Cells[6][i]==".")
         if (Form1->StringGrid1->Cells[7][i]==".")
          if (Form1->StringGrid1->Cells[8][i]==".")
           if (Form1->StringGrid1->Cells[9][i]==".")
            if (Form1->StringGrid1->Cells[10][i]==".")
             if (Form1->StringGrid1->Cells[11][i]==".")
              if (Form1->StringGrid1->Cells[12][i]==".")
              {
                for (int j=0;j<=12;j++)
                  Form1->StringGrid1->Cells[j][i]=Form1->StringGrid1->Cells[j][i+1];

                for (int j=0;j<=12;j++)
                  Form1->StringGrid1->Cells[j][i+1]=".";
              }
 }
}


CODE

// DELETE
if (MessageDlg("Óäàëèòü ñâèäåòåëüñòâî  ¹ " + Form1->StringGrid1->Cells[1][RowNow] + " ?", mtConfirmation,
   TMsgDlgButtons() << mbYes << mbNo, NULL)==mrYes)
{
 // DELETE DATA FILE //
 DeleteFile(A_PATH()+"BASE\\"+Form1->StringGrid1->Cells[12][Form1->StringGrid1->Row]);

 for (int i=0;i<=12;i++)
  Form1->StringGrid1->Cells[i][Form1->StringGrid1->Row]=".";
 SortSGF1();
 Form1->StringGrid1->RowCount--;
}

gvg
Отправлено: 18.11.2005, 09:11


Машинист паровоза

Группа: Участник
Сообщений: 222



QUOTE

Я пробывала исправить, smile.gif но сейчас тоже не работает. sad.gif

Ну, не знаю... Я не просто так писал, все опробовал. В дополнение — не забудьте, что нельзя удалять последнюю нефиксированную строку.
QUOTE

И как менять размеры колонок, установила goColSizing в true, но поменять размер колонок не удается курсором мыши.
У меня СтрингГрид без фиксированных колонок и строк.

Надо фиксированную строку... На ней производится изменение размера. Это самое простое решение.
Инга
Отправлено: 18.11.2005, 10:33


Не зарегистрирован







В результате остановилась на этом, подсказанном варианте. При щелчке на кнопку:
CODE

class TPublicGrid: public  TStringGrid
{
   public:
       using TStringGrid::DeleteRow;
};
for (int i = Form1->StringGrid1->RowCount; i--;)
{

     if(Form1->StringGrid1->Cells[1][i] == "")
       ((TPublicGrid*)Form1->StringGrid1)->DeleteRow(i);

}

Спасибо всем!

Вернуться в Вопросы программирования в C++Builder