Q&A

  • 그리드에서 선택 두번 안되게 할수있나요?
계속 걸리는게 많아 잘안되서 그러는데요..
두가지가 궁금해서요..

1 . db 그리드에서 선택이라는 필드(non-db)가 있을때
클릭하면 Y로 바뀌고 다시 클릭하면 Y가 아닌 원상태로 돌아갑니다...
마지막은 Y로 체크된 하나 가지고 저장도 하는 로직인데요...

Y로 선택된 행이 두개 있으면 에러 메시지가 나오게끔 하고 싶거든요...
무조건 Y선택은 하나만 되게끔요...

아래 이벤트는 한번 클릭하면 Y로 바뀌고 다시 클릭하면 Y가 아닌 원상태로 돌아가는 이벤트입니다..
procedure DBGrid1EditButtonClick(Sender: TObject);
begin
  with CDSet_Sum do
  begin
    Edit;
    if FieldByName('SelectCd').Value = '' then
    begin
      FieldByName('SelectCd').Value := 'Y';
    end
    else
    begin
      FieldByName('SelectCd').Value := '';
    end;
    Post;
  end;
end;


2. db그리드 상에서 CDSet_MtrQry의 SelectCd가 'Y' 인 경우만 선택해서 저장하고 싶어요...

CDSet_MtrQry  : 원본 데이터 셋
CDSet_Sum :  원본 데이터에서 선택한 행만 저장

선택모으기 클릭이벤트에서 아래와 같이 작성했는데요..
with CDSet_MtrQry do
     begin
      First;

         while not EOF do
         begin

           if    ( CDSet_MtrQry.FieldByName('SelectCd').Value = 'Y')  then
           begin
             CDSet_Sum.AppendData(CDSet_MtrQry.Data,True);
             Edit;
             Post;
          end;
          Next;
      end;
      
  end;

만약 결과값이 CDSet_MtrQry 가 두개의 행이면 그중에서 한개만 선택해서
한개만 저장하고 싶은데요...
결과를 보면 한개가 아니고 두개가 INSERT되거든요...
선택한 한개만 저장시킬려면 어떻게 하면 될까요???
물론 저장로직은 여기서 나온 행대로 그대로 저장하니까
여기에서부터 결과값이 한개가 나와야 될테데 두개니까 안되는거 같아서요..

고견 부탁드립니다...
1  COMMENTS
  • Profile
    Crazy™ 2008.07.24 23:55
    음...글쎄요..고견은 아니고 방법은 생각하면 많긴 할텐데요.
    가령 선택했을때 루핑을 돌리던가 locate로 찾든가, 어떤 변수에 선택햇다는 값을 담아놓는다든가 등등..

    지금 상태에서 가장수정안할수 있는 방법은 저장시 처리하면 될것 같네요.

    var
    b_select : Boolean;
    begin
    b_select := False;

    with CDSet_MtrQry do
    begin
    First;

    while not EOF do
    begin

    if ( CDSet_MtrQry.FieldByName('SelectCd').Value = 'Y') then
    begin
    if b_select then
    begin
    showmessage('y는 하나만 선택');
    break;
    end else begin
    b_select := True;
    CDSet_Sum.AppendData(CDSet_MtrQry.Data,True);
    Edit;
    Post;
    end;
    end;
    Next;
    end;

    end;