Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Заполнение StringGrid (https://forum.antichat.xyz/showthread.php?t=190436)

Alexsis f 26.03.2010 11:29

Заполнение StringGrid
 
Здравствуйте!
Мне нужно реализовать заполнение StringGrid-a таким образом, чтобы данные добавлялись только в строку, следующую за уже заполненной, т.е. свеху вниз учитывая наличие данных в предшествующей строке (примерно как в табличной части документа 1С).
Наведите пожалуйста на нужную мысль, как это сделать.
Спасибо.

W!z@rD 26.03.2010 11:53

Insert?

EndLeSSDre@M 26.03.2010 12:01

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

Alexsis f 26.03.2010 12:14

я бы мог это сделать посредствам хранения последней запоненной строки в переменной, но это будет очень не удобно и не эффективно, т.к. таблица будет храниться в SQL и выгружаться будет от туда. В таком случае мне бы пришлось хранить эту переменную в SQL.
Я бы хотел создать процедуру, которая просто проверяла бы наличие данных в строках и возвращала бы Row последней заполненной строки

BrainDeaD 26.03.2010 13:34

а не проще ли при загрузке из БД посчитать строки, а потом по индексу обращатьтся к последней и проверять ее содержимое? т.к. еслёи у тебя будет очень много строк, то проверка содержания каждой потребует много времени.

noxjoker 26.03.2010 14:21

SQL Запрос в базу получаеш таблицу и в StringGrid

Alexsis f 26.03.2010 14:59

Пока получилось вот что придемать:
var
RowNum : Integer;
begin
RowNum := StringGrid1.RowCount - 1;
if StringGrid1.Cells[1, RowNum] <> ' ' then
begin
StringGrid1.RowCount := StringGrid1.RowCount + 1;
end;

RowNum := StringGrid1.RowCount - 1;
with StringGrid1 do begin
Cells[1, RowNum] := text1;
Cells[2, RowNum] := text2;
Cells[3, RowNum] := text3;
Cells[4, RowNum] := text4;
end;
end;

Но сдесь один критический для меня недостаток - изначальная привязка к RowCount

BrainDeaD 26.03.2010 16:13

чем это он критический? ну можно в цикле повышать индекс строки и проверять его на пустоту. за тем писать в первую пустую строку в зависимости от предыдущей. тогда ты обойдёшся без rawcount

Alexsis f 26.03.2010 16:23

Цитата:

Сообщение от BrainDeaD
чем это он критический? ну можно в цикле повышать индекс строки и проверять его на пустоту. за тем писать в первую пустую строку в зависимости от предыдущей. тогда ты обойдёшся без rawcount

А можно на примере :) , хотя бы вкратце

BrainDeaD 26.03.2010 16:39

дело в том, что я не знаю делфи, а пишу на c, c#, c++
но принцип таков:

RowNum =0
while StringGrid1.Cells[1, RowNum] не равен ' '

do
RowNum++ // считает строки

потом когда достигает пустой строки

получаем текст из предыдущей строки StringGrid1.Cells[1, RowNum-1]

и зписываем в пустую строку StringGrid1.Cells[1, RowNum] нужный текст в зависимости от текста предыдущего

на пример StringGrid1.Cells[1, RowNum] = нужный текст + текст предыдущего

если содержание предыдущей строки не имеет значения значит просто в пишешь StringGrid1.Cells[1, RowNum] = нужный текст


Время: 21:29