void __fastcall TForm1::delrow(TStringGrid *grid, int row)
{
if (grid->RowCount == 1)
{
grid->Rows[0]->Clear();
return;
}
for (int i=row; i < grid->RowCount; i++)
{
for (int j=0; j < grid->ColCount; j++)
{
grid->Cells[j]=grid->Cells[j][i+1];
}
grid->Rows[i+1]->Clear();
}
grid->RowCount--;
}
Удаление строк из StringGrid
Столкнулся с проблемой. Поидее есть какая то страндартная функция удаления строки из таблици, но нигде не могу найти. Помогите пожалуйста!
Цитата: iRain
Нужно удалить строку из TSringGrid!
Столкнулся с проблемой. Поидее есть какая то страндартная функция удаления строки из таблици, но нигде не могу найти. Помогите пожалуйста!
Столкнулся с проблемой. Поидее есть какая то страндартная функция удаления строки из таблици, но нигде не могу найти. Помогите пожалуйста!
1. Старайся писать без опечаток (Строки не удаРяют их удаляют).
2. По правилам конференции, перед тем как задать вопрос ФАК читать обязательно. Если-бы ты сделал это, то увидел-бы Вопрос 25. Как удалить строку/столбец в StringGrid?
Если ты несделаешь это еще раз, то будут санкции.
Если уже нету функции (а она должна быть) удаления строки, то можно заморочится через цикл "for" и код выйдет как минимум в два раза меньше! Я спрашиваю про ункцию, примерно такую, как в TMemo:
Memo1->Lines->Delete(N);
Где N-номер строки!
P.S.: Прошу прощения за опечатки.
А вот и код:
Цитата: iRain
А вот и код:
Код:
void __fastcall TForm1::delrow(TStringGrid *grid, int row)
{
if (grid->RowCount == 1)
{
grid->Rows[0]->Clear();
return;
}
for (int i=row; i < grid->RowCount; i++)
{
for (int j=0; j < grid->ColCount; j++)
{
grid->Cells[j]=grid->Cells[j][i+1];
}
grid->Rows[i+1]->Clear();
}
grid->RowCount--;
}
{
if (grid->RowCount == 1)
{
grid->Rows[0]->Clear();
return;
}
for (int i=row; i < grid->RowCount; i++)
{
for (int j=0; j < grid->ColCount; j++)
{
grid->Cells[j]=grid->Cells[j][i+1];
}
grid->Rows[i+1]->Clear();
}
grid->RowCount--;
}
И в чем преймущество? Хоть убей не вижу. 2-а цикла и по-ячеечное копирование?
ЗЫ: специальной ф-ии для удаления строки в TStringGrid нет, по крайней мере в VCL версий 5 и 6.
Поэтому:
Код:
class TPublicGrid: public TStringGrid
{
public:
using TStringGrid::DeleteRow;
};
{
public:
using TStringGrid::DeleteRow;
};
В программе:
((TPublicGrid*)StringGrid1)->DeleteRow(2);
Или так:
Код:
class PACKAGE TMyStringGrid: public TStringGrid
{
private:
protected:
public:
__fastcall TMyStringGrid(Classes::TComponent* AOwner):
TStringGrid(AOwner){};
void _fastcall MoveRow(int from,int to){RowMoved(from,to); }
void _fastcall RowDelete(int arow){DeleteRow(arow);}
void _fastcall InsertRow(int arow){RowCount++; RowMoved(RowCount-1,arow);}
};
{
private:
protected:
public:
__fastcall TMyStringGrid(Classes::TComponent* AOwner):
TStringGrid(AOwner){};
void _fastcall MoveRow(int from,int to){RowMoved(from,to); }
void _fastcall RowDelete(int arow){DeleteRow(arow);}
void _fastcall InsertRow(int arow){RowCount++; RowMoved(RowCount-1,arow);}
};
Цитата: lena_ki
Удаление строки присутствует в TCustomGrid: : DeleteRow(int ARow), но эта функция закрыта(protected) для свободного использования.
Поэтому:
...
Поэтому:
...
да, есть такой прием, молодец:)
ЗЫ: если заглянуть в исходник grids.pas:
Код:
procedure TCustomGrid.DeleteRow(ARow: Longint);
begin
MoveRow(ARow, RowCount - 1);
RowCount := RowCount - 1;
end;
begin
MoveRow(ARow, RowCount - 1);
RowCount := RowCount - 1;
end;
и т.д.
Цитата: GIZMO
да, есть такой прием, молодец:)
ЗЫ: если заглянуть в исходник grids.pas:
и т.д.
ЗЫ: если заглянуть в исходник grids.pas:
Код:
procedure TCustomGrid.DeleteRow(ARow: Longint);
begin
MoveRow(ARow, RowCount - 1);
RowCount := RowCount - 1;
end;
begin
MoveRow(ARow, RowCount - 1);
RowCount := RowCount - 1;
end;
и т.д.
а зачем опустил рейтинг?
ЗЫ: Надо в ФАК - проще и короче способ.
Цитата: oxotnik333
а зачем опустил рейтинг?
мля, хотел поднять :(
ша попробую исправить