Заполнение StringGrid

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Alexsis f, 26 Mar 2010.

  1. Alexsis f

    Alexsis f New Member

    Joined:
    11 Feb 2009
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте!
    Мне нужно реализовать заполнение StringGrid-a таким образом, чтобы данные добавлялись только в строку, следующую за уже заполненной, т.е. свеху вниз учитывая наличие данных в предшествующей строке (примерно как в табличной части документа 1С).
    Наведите пожалуйста на нужную мысль, как это сделать.
    Спасибо.
     
  2. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    Insert?
     
  3. EndLeSSDre@M

    EndLeSSDre@M Banned

    Joined:
    18 Jul 2009
    Messages:
    142
    Likes Received:
    99
    Reputations:
    -5
    Как бы ты можешь просто в конце программы сохранять значение строки, и потом если снова на кнопку нажимаешь то заполнение будет начинаться со след строки
     
  4. Alexsis f

    Alexsis f New Member

    Joined:
    11 Feb 2009
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    я бы мог это сделать посредствам хранения последней запоненной строки в переменной, но это будет очень не удобно и не эффективно, т.к. таблица будет храниться в SQL и выгружаться будет от туда. В таком случае мне бы пришлось хранить эту переменную в SQL.
    Я бы хотел создать процедуру, которая просто проверяла бы наличие данных в строках и возвращала бы Row последней заполненной строки
     
  5. BrainDeaD

    BrainDeaD Elder - Старейшина

    Joined:
    9 Jun 2005
    Messages:
    774
    Likes Received:
    292
    Reputations:
    214
    а не проще ли при загрузке из БД посчитать строки, а потом по индексу обращатьтся к последней и проверять ее содержимое? т.к. еслёи у тебя будет очень много строк, то проверка содержания каждой потребует много времени.
     
  6. noxjoker

    noxjoker Member

    Joined:
    7 Aug 2009
    Messages:
    189
    Likes Received:
    24
    Reputations:
    0
    SQL Запрос в базу получаеш таблицу и в StringGrid
     
  7. Alexsis f

    Alexsis f New Member

    Joined:
    11 Feb 2009
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    Пока получилось вот что придемать:
    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
     
  8. BrainDeaD

    BrainDeaD Elder - Старейшина

    Joined:
    9 Jun 2005
    Messages:
    774
    Likes Received:
    292
    Reputations:
    214
    чем это он критический? ну можно в цикле повышать индекс строки и проверять его на пустоту. за тем писать в первую пустую строку в зависимости от предыдущей. тогда ты обойдёшся без rawcount
     
  9. Alexsis f

    Alexsis f New Member

    Joined:
    11 Feb 2009
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    А можно на примере :) , хотя бы вкратце
     
  10. BrainDeaD

    BrainDeaD Elder - Старейшина

    Joined:
    9 Jun 2005
    Messages:
    774
    Likes Received:
    292
    Reputations:
    214
    дело в том, что я не знаю делфи, а пишу на 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] = нужный текст
     
    #10 BrainDeaD, 26 Mar 2010
    Last edited: 26 Mar 2010
  11. Alexsis f

    Alexsis f New Member

    Joined:
    11 Feb 2009
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    RowNum :=0;
    while StringGrid1.Cells[1, RowNum] <> ' ' do
    begin
    RowNum:=RowNum+1;
    StringGrid1.Cells[1, RowNum]:=text;
    end;

    Спасибо, пример понятен