Q&A

  • 그리드에서 row 삭제 하는거 다시 질문드립니다..꼭 봐주세요..ㅠ.ㅠ!!
안녕하세요..
오전에 질문드리고 다시 질문드립니다.. ㅠ.ㅠ...
for 문을 돌려서 그리드의 조건이 맞으면 해당로우를 삭제 하려고 합니다..
그런데..
removerow 를 써서 row 삭제하다보니..
첫번째 row를 삭제하면 두번째 row가 첫번째 row가 되고..
다시 이row를  삭제하면 세번째 row 가 첫번째 row 가 되는거져...
그래서 예를 들자면..

아래와 같은 그리드에서

0     aa      12      가가
1     aa      324     나나
2     aa      234     다다
3     aa      234     라라
4     bb      55      미미
.      .       .        .
.      .       .        .
.      .       .        .
7     aa       22       .
.      .       .        .
.      .       .        .


advstringgrid.cells[1,row] 에서 값이 for문을 돌려 'aa'인것만을 삭제 하려고 하면 ..


for i := 1 to AdvGrid_Money.Rowcount -1 do                                                                    
  begin                                                                                                        
    if Advstringgrid.Cells[1,i] = 'aa' then
    begin                                                                                                      
       Advstringgrid.RemoveRows(i,1);                                                          
    end;                                                                                                      
  end;                                                                                                        
  
원래는 세번째 row까지 삭제하려는게 저의 의도인데..세번째 로우에는 'bb'라는 값이 와버려서 삭제가 안된다는 말입니다요..
i를 어떻해 증가시켜줘야 되는지 모르겠어요...
제가 무슨 소릴 하려는지 이해하실려나..- -;;  
제 머리로는 다른 방법이 생각이 안나는데요..
고수님들 도와주세요..
아침부터 낑낑대고 있습니다..ㅠ.ㅠ....
3  COMMENTS
  • Profile
    major 2003.08.12 01:52


    아침에 답했던 사람인데요..

    님이 하신 말씀을 잘 봤습니다.. 저두 앞으로 그렇게 사용해야 겠네요..

    근데 이 문제는 걍 변수 하나를 더 써서 그러니까 이렇게 하면 되지 않을까요?

    j := 0;
    for i := 1 to AdvGrid_Money.Rowcount -1 do
    begin
         inc(j);
         if Advstringgrid.Cells[1,j] = 'aa' then
         begin
            Advstringgrid.RemoveRows(j,1);
            j := j -1;
         end;        
    end;

    해보지는 않았는데 로우를 다시 셀수 있도록 변수하나만 지정해주면 될것같은데요...^^;;

    그럼 즐프하세염.
  • Profile
    장태원 2003.08.12 01:46
    for i := 1 to AdvGrid_Money.Rowcount -1

    이렇게 돌리세요


    원인은 다음과 같습니다.

    위에부터 삭제가 되면.. 총인덱스가 출어들기 때문에 정확한 인덱스에 의한 value 를 가져올수 없습니다.
    그러나 꺼구로 검색하여 삭제하면 이런문제를 걱정할 필요가 없습니다.

  • Profile
    초보 2003.08.12 02:56
    아직도 저는 멀었다는 사실을 절실히 깨달으며..갑니다..
    두분 도움 정말정말 감사함당~~~