Костик |
Отправлено: 11.01.2005, 21:54 |
|
Не зарегистрирован
|
Как в компоненте StringGrid удалить требуемую строку ? Вроде бы такая элементарщина, а не получается, вылетает сообщение об ошибке. Я делаю так: StringGrid1->Rows->Delete(1); Не получается, пишет что то вроде 'to few parametres to call GetRows ...'. Почему компилятор меня не любит ??? Помогите ! |
|
Bond |
Отправлено: 11.01.2005, 22:01 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 142
|
CODE |
StringGrid1->Cells[ColumnIndex][RowIndex] = "Hello";
|
|
|
Bond |
Отправлено: 11.01.2005, 22:07 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 142
|
Правильно обратиться к строке:
CODE | StringGrid1->Rows[_RowIndex] |
При попытке удалить строку выдает ошибку "Cannot insert or delete rows from grid"
|
|
Aptem |
Отправлено: 12.01.2005, 03:48 |
|
Мастер участка
Группа: Участник
Сообщений: 349
|
Когда я мало знал о TStringGrid я делал так:
CODE | //---------------------------------------------------------------------------
void __fastcall TForm1::DeleteRowInGrid ( TStringGrid *Grid, int Row )
{
for ( int i = 0; i < Grid -> RowCount; i++ )
if ( i > Row )
for ( int j = 0; j < Grid -> ColCount; j++ )
Grid -> Cells[j][i-1] = Grid -> Cells[j][i];
for ( int j = 0; j < Grid -> ColCount; j++ )
Grid -> Cells[j][Grid -> RowCount-1] = "";
Grid -> RowCount--;
}
//---------------------------------------------------------------------------
|
Отредактировано Aptem — 12/01/2005, 04:59
|
|
full_lamer |
Отправлено: 12.01.2005, 08:50 |
|
Машинист паровоза
Группа: Участник
Сообщений: 225
|
QUOTE (Aptem @ 12/01/2005, 04:50) | Когда я мало знал о TStringGrid я делал так...
|
а теперь?
|
|
Bond |
Отправлено: 12.01.2005, 10:45 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 142
|
Есть компонент с расширенными функциональными возможностями TProfGrid, но ссылку на него я не помню. Можно в нем посмотреть — может есть фишка удаления строки
|
|
GIZMO |
Отправлено: 12.01.2005, 11:53 |
|
Машинист паровоза
Группа: Участник
Сообщений: 174
|
QUOTE (Костик @ 11/01/2005, 22:56) | Как в компоненте StringGrid удалить требуемую строку ? Вроде бы такая элементарщина, а не получается, вылетает сообщение об ошибке. Я делаю так: StringGrid1->Rows->Delete(1); Не получается, пишет что то вроде 'to few parametres to call GetRows ...'. Почему компилятор меня не любит ??? Помогите ! |
Удалить в компоненте TStringGrid произвольную строку или столбец нельзя, только последнюю(ий) и поэтому получается следующее...
CODE |
//удалить колонку...
void RemoveCol(TStringGrid* StringGrid, int Index)
{
assert(StringGrid != NULL);
//откл. перерисовку...
SNDMSG(StringGrid->Handle, WM_SETREDRAW, false, 0);
try
{
const int col_count = StringGrid->ColCount;
// смещаем стобцы на один влево
for (int col = Index; col < col_count — 1; ++col)
{
StringGrid->Cols[col] = StringGrid->Cols[col + 1];
}
// удаляем последнюю колонку...
StringGrid->ColCount = col_count -1;
}
__finally
{
SNDMSG(StringGrid->Handle, WM_SETREDRAW, true, 0);
}
// вычисляем область для перерисовки...
RECT R = StringGrid->CellRect(0, Index);
InflateRect(&R, StringGrid->Width, StringGrid->Height);
//и обновляем ее...
InvalidateRect(StringGrid->Handle, &R, false);
}
//-----------------------------------------------------------------------------
|
Тоже самое со строками.
|
|
Konstantine |
Отправлено: 12.01.2005, 15:37 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
StringGrid1->Rows->Delete(1); не подходит, т.к. StringGrid1->Rows возвращает тип TStrings... — по строчке на каждую ячейку...
а удалить строку наверно и нету. нада или переписывать нижние строки (как предложил Aptem) или можно (криво правда) высоту строки сделать =0.... (правда линия вдвое толще выходит), а при =-1, её вообще нету....
|
|
Bond |
Отправлено: 12.01.2005, 15:50 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 142
|
Мне кажется что самый нормальный вариант у GIZMO.
Он ведь переписывает строки более шустро и выключает перерисовку грида, что не затормозит приложение
|
|
Aptem |
Отправлено: 12.01.2005, 19:41 |
|
Мастер участка
Группа: Участник
Сообщений: 349
|
QUOTE (full_lamer @ 12/01/2005, 09:52) | QUOTE (Aptem @ 12/01/2005, 04:50) | Когда я мало знал о TStringGrid я делал так...
|
а теперь? |
А теперь я использую TAdvStringGrid вместо обычного TStringGrid, а там существует функция RemoveRows
|
|