Здравствуйте! Мне нужно реализовать заполнение StringGrid-a таким образом, чтобы данные добавлялись только в строку, следующую за уже заполненной, т.е. свеху вниз учитывая наличие данных в предшествующей строке (примерно как в табличной части документа 1С). Наведите пожалуйста на нужную мысль, как это сделать. Спасибо.
Как бы ты можешь просто в конце программы сохранять значение строки, и потом если снова на кнопку нажимаешь то заполнение будет начинаться со след строки
я бы мог это сделать посредствам хранения последней запоненной строки в переменной, но это будет очень не удобно и не эффективно, т.к. таблица будет храниться в SQL и выгружаться будет от туда. В таком случае мне бы пришлось хранить эту переменную в SQL. Я бы хотел создать процедуру, которая просто проверяла бы наличие данных в строках и возвращала бы Row последней заполненной строки
а не проще ли при загрузке из БД посчитать строки, а потом по индексу обращатьтся к последней и проверять ее содержимое? т.к. еслёи у тебя будет очень много строк, то проверка содержания каждой потребует много времени.
Пока получилось вот что придемать: 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
чем это он критический? ну можно в цикле повышать индекс строки и проверять его на пустоту. за тем писать в первую пустую строку в зависимости от предыдущей. тогда ты обойдёшся без rawcount
дело в том, что я не знаю делфи, а пишу на 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] = нужный текст
RowNum :=0; while StringGrid1.Cells[1, RowNum] <> ' ' do begin RowNum:=RowNum+1; StringGrid1.Cells[1, RowNum]:=text; end; Спасибо, пример понятен