Q&A

  • 스트링그리드 특정셀을 수정하는 방법에 대한 문의입니다.
안녕하세요 오래만에 질문을 올려봅니다.

스트링그리드에 대해 공부를 하고 있는데요..

기본적인 건 알겠는데 DB에서 파일을 받아서 받은 데이타를 수정할려고 하는데 수정이 안되네여.

예를 들면.
for i := 1 to 200 do
begin
     if Trim(SGjbsales.cells[0,i]) <> '' then
     begin
        DM.Query.first;
        if DM.Query.Locate('BPBARCODE',Trim(StringGrid1.cells[0,i]),[loPartialKey]) then
        begin
            SGjbsales.cells[1,i] := DM.Query.FieldByName('CODE').AsString;
            SGjbsales.cells[2,i] := '0';
            SGjbsales.Cells[3,i] := '1';
            SGjbsales.Cells[4,i] := '0';
         end;
     end;
end;

이렇게 되어 있는데 여기서 셀에 기본적으로 들어가게 되어 있는 값을 그리드에서 직접 수정할려고 하는데
수정이안되요 아무래도 for 문을 돌려서 하기때문에 수정이 안되는 것인것 같은데 어떻게 수정해야 되는지
아시는분 좀 알려주십시요.
for문을 돌리는것은 col을 기본으로 200 까지 생성되게 하기 위해서 돌렸습니다.

오늘도 좋은 하루 되세요
4  COMMENTS
  • Profile
    최용일 2006.05.30 22:28
    안녕하세요. 최용일입니다.

    for문안에서 DM.Query.Next를 해주셔야지 될것 같은데요. 안그러면 항상 첫번째 데이터만 표시가 될것같네요... DM.Query.First도 for문 밖으로 빼주셔야할듯...

    쿼리한 결과가 항상 200개로 고정되어 있지 않다면 for문을 쓰는것은 상당히 위험한 코딩일듯합니다.

    보통 while문을 씁니다. 아래는 전형적인 쿼리 결과가지고 작업하는 루프문입니다.

    Query1.First; // 첫번째 레코드로 이동
    while not Query1.Eof do // 억세스 가능한 레코드가 있는냐?
    begin
        .... ;// 원하는 작업
        Query1.Next; // 다음레코드로 이동
    end;

    ^^ 항상 즐코하세요...

  • Profile
    김홍범 2006.05.30 23:18


    답변감사합나디.

    제가 코딩이 잘못된 부분은 알겠는데요
    문제는 예를 들어
    그리드에서 SGjbsales.cells[2,i] := '0';
    이셀에 0이라는 값을 기본으로 받았는데 제가 수정하고 싶어 100 이라고 고치면 100이 떠야 하는데 그렇게 안나오고 0이 나온다는 겁니다.
    for문이나 while문을 사용해도 똑같을것 같은데요 제 생각으로는....  
    제가 알고 싶은건 그리드에 들어가 있는 값을 수정하는 방법입니다.

    제가 아직은 초보라서 이런데서 막히네요
    답변기다리겠습니다.
  • Profile
    박성훈 2006.05.31 00:53


    혹시 그리드의 Options속성을 체크해 보셨는지요?


  • Profile
    최용일 2006.05.30 23:39
    글쎄요. 제가 해본바로는 이상없이 잘 표시되는데...

    혹시 스트링그리드의 RowCount가 200보다 작지 않나요? ColCount, RowCount를 벗어난 셀은 표시되지 않습니다. 확인해보세요.

    ColCount=5, RowCount=5일때 Cells[10, 10] := '111'를 대입해도 아무런 효과가 없습니다.

    확인해보세요...

    ^^