Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Лабы_Ч2.doc
Скачиваний:
9
Добавлен:
09.11.2019
Размер:
2 Mб
Скачать

7.1.30Добавление строки в таблицу

Добавить строку в таблицу очень легко. Для этого достаточно увеличить количество строк компонента StringGrid1 на единицу. Соответствующую процедуру следует связать с кнопкой «Добавить». Код процедуры представлен ниже.

//Процедура введення додаткового рядка

procedure TfrmRecord.btnAddClick(Sender: TObject);

begin

StringGrid1.RowCount := StringGrid1.RowCount +1;

end;

7.1.31Удаление строки из таблицы

Эта процедура несколько сложнее, чем добавление. Для того чтобы удалить некоторую строку следует все остальные последовательно поднять на одну выше, а затем количество строк в компоненте уменьшить на единицу, что обрежет последнюю строку.

Но для того, чтобы переносить записи из одной строки компонента в другую, целесообразно предварительно написать подпрограммы считывания записи из строки компонента StringGrid и занесения записи в строку этого компонента. Эти подпрограммы пригодятся и для решения других задач, в частности задачи считывания массива из StringGrid и задачи записи массива в StringGrid.

Код соответствующих подпрограмм приведен ниже.

// Функція, що читає запис із рядка StrinGrid

function recordFromRowGrid(sg: TStringGrid; row: integer): TAttRec;

// Функція, що читає запис із рядка StrinGrid

begin

result.group := sg.Cells [0, row];

result.fio := sg.Cells [1,row];

result.neud := strToInt(sg.Cells [2, row]);

result.srBall := strToFloat(sg.Cells [3, row]);

end;

// Процедура переносу запису у рядoк StrinGrid

procedure recordToRowGrid(rec: TAttRec; sg:TStringGrid; row: integer);

begin

sg.Cells [0, row] := rec.group;

sg.Cells [1, row] := rec.fio;

sg.Cells [2, row]:= intToStr(rec.neud);

sg.Cells [3,r ow]:= floatToStr(rec.srBall);

end;

Наличие этих подпрограмм позволяет написать процедуру удаления записи из компонента StringGrid подобно тому, как удаляется элемент из массива.

Код процедуры удаления представлен ниже.

// Процедура вилучення поточного рядка із StringGrid

procedure TfrmRecord.btnDelClick(Sender: TObject);

var i, k: integer; r: TAttRec;

begin

k := StringGrid1.Row ; //Узнаем, какая строка активна

if k = 0 then exit;

//Переписуємо наступні рядки у попередні

for i := k to StringGrid1.RowCount - 2 do

begin

r := recordFromRowGrid(StringGrid1, i + 1);

recordToRowGrid(r, StringGrid1, i );

end;

// Обрезаем последюю строку

StringGrid1.RowCount := StringGrid1.RowCount - 1;

end;

7.1.32Процедура создания массива записей по содержимому StringGrid

Эта процедура обеспечивает обмен информацией между компонентом StringGrid и массивом записей. Алгоритм процедуры заключается в циклическом вызове написанной ранее процедуры считывания записи из StringGrid. Ниже приводится код этой процедуры.

// Процедура формування масиву по змісту StringGrid

procedure getArrayFromGrid(var ar: TAttArray; var count: integer;

sg: TStringGrid);

var i: integer;

begin

count := sg.RowCount-1;

for i := 1 to count do

ar[i] := recordFromRowGrid(sg, i );

end;