Q&A

  • DBGrid에서 ','표시하기...스트링 필드에서.
안녕하세요. 까마귀입니다.

일주일중 죽을 확률이 가장 낮다는 화요일입니다. 아무렇게나 딩굴어도 되겠네요.



스트링 필드의 데이터를 DBGrid에 나타내려고 하는데요.

들어있는 값은 전부 숫자라서 ','를 표시하려고 합니다.

자리수에 맞게만 표시를 하려고 하니까 조금 난감하네요.

DisplayFormat등의 옵션도 없고, TField의 출력형태를 변경하려고 해도, 않되고요.

(Query1.FieldByName('BMan') As TFloatField).DisplayFormat := '#,###';

위처럼 했는데 에러만 나네요.

Query를 사용해서 그런건가요? SQL을 연결해서 쓰기 때문에 Table 콤포넌트는 못쓰는데...

참 이것은 DBGrid상에서 표시되는 데이터입니다.

아시는 분 가르쳐주시면 감사하겠습니다.

꾸벅~~~~...







위대한 단군혼이 살아있는 나라.... 대한민국.

2  COMMENTS
  • Profile
    한창희 2000.04.26 10:09
    까마귀 wrote:

    > 안녕하세요. 까마귀입니다.

    > 일주일중 죽을 확률이 가장 낮다는 화요일입니다. 아무렇게나 딩굴어도 되겠네요.

    >

    > 스트링 필드의 데이터를 DBGrid에 나타내려고 하는데요.

    > 들어있는 값은 전부 숫자라서 ','를 표시하려고 합니다.

    > 자리수에 맞게만 표시를 하려고 하니까 조금 난감하네요.

    > DisplayFormat등의 옵션도 없고, TField의 출력형태를 변경하려고 해도, 않되고요.

    > (Query1.FieldByName('BMan') As TFloatField).DisplayFormat := '#,###';

    > 위처럼 했는데 에러만 나네요.

    > Query를 사용해서 그런건가요? SQL을 연결해서 쓰기 때문에 Table 콤포넌트는 못쓰는데...

    > 참 이것은 DBGrid상에서 표시되는 데이터입니다.

    > 아시는 분 가르쳐주시면 감사하겠습니다.

    > 꾸벅~~~~...

    >

    >

    >

    > 위대한 단군혼이 살아있는 나라.... 대한민국.



    디비그리드에 콤마를 삽입하는 경우에는 디비그리드에서 처리를 하는 것이 아니고요,

    디비그리드와 연결이 되어있는 쿼리에서 처리를 하는 것입니다. 다음과 같이 하세요.

    먼저 디비그리드와 연결되어있는 쿼리를 더블클릭하세요. 그러면 조그마한 박스가 나타날 것입니다. 그 조그마한 박스에서 오른쪽 마우스를 클리하면 여러 부메뉴 리스트가 나타나는데 거기에서 'add all fiels' 선택하세요. 그러면 쿼리에서 주었던 SQL 문장의 필드들이 나타날 것입니다. 위에서 보니까 BMan 이네요. 그 BMan를 클릭후objectInspector의 properties에서 DisplayFormat의 값을 '#,###'으로 주세요. 그러면

    디비그리드는 쿼리의 DisplayFormat에 의해서 콤마를 삽입하여 보여 주게 되지요!!!

    그래도 잘 모르면 메일주세요 sample 를 보내드리지요.

  • Profile
    HART 2000.04.26 01:13
    아래 소스 스트링 그리드에 해당하는 소스데 디비 그리디에서 같은 효과을 낼 수 있습니다.

    단 먼저 숫자로 구성 된있는지 체크에야 합니다.





    procedure TFA_AcSalesVatBill_edit.Grid_SaleVatBill2DrawCell(Sender: TObject;

    ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);

    var

    Left : integer;

    DataInCell : string;

    begin

    DataInCell := Grid_SaleVatBill2.Cells[ACol,ARow];

    with Grid_SaleVatBill2.Canvas do

    begin

    FillRect(Rect);

    if (ARow = 0) or (ACol = 0) then

    Left := Rect.Left + ((Rect.Right-Rect.Left) - TextWidth(DataInCell)) div 2

    else

    begin

    if (ACol in [0,3,4,5,6,7]) then

    begin

    if DatainCell = '' then DatainCell := '0';

    if (ACol in [3,4,5,6,7]) then

    DatainCell := Formatfloat('#0,',Strtofloat(DatainCell));

    Left := Rect.Right - TextWidth(DataInCell) - 3;

    end

    else Left := Rect.Left + 3;

    if (ACol in [1,9,11]) then

    Left := Rect.Left;// + ((Rect.Right-Rect.Left) - TextWidth(DataInCell)) div 2;

    end;

    TextRect(Rect, Left, Rect.Top+3, DataInCell);

    end;

    end;

    // 디비 그리디에서 체크한 예...



    procedure TFA_AcBank.Grid_bankDrawColumnCell(Sender: TObject;

    const Rect: TRect; DataCol: Integer; Column: TColumn;

    State: TGridDrawState);

    var

    Left : integer;

    DataInCell : string;

    begin

    // 본/지점

    if Column.Field.FieldName = 'FMAIN_OR_BRANCH' then

    begin

    DataInCell := Column.Field.AsString;

    with TDBGrid(Sender).Canvas do

    begin

    FillRect(Rect);

    //화면에 표시할 내용을 변경하는 작업

    //실지 데이터는 변경되지 안는다.

    case strtointDef(DataInCell,0) of

    0 : DataInCell := '';

    1 : DataInCell := '1.본점';

    2 : DataInCell := '2.지점';

    end;

    // 가운데 정렬을 위한 소스

    Left := Rect.Left + ((Rect.Right-Rect.Left) - TextWidth(DataInCell)) div 2;

    // 실지적으로 화면에 표시한다.

    TextRect(Rect, Left, Rect.Top+3, DataInCell);

    end;

    end;

    // 은행종류(분류)

    if Column.Field.FieldName = 'FBANK_CLASS' then

    begin

    DataInCell := Column.Field.AsString;

    with TDBGrid(Sender).Canvas do

    begin

    FillRect(Rect);

    //화면에 표시할 내용을 변경하는 작업

    //실지 데이터는 변경되지 안는다.

    case strtointDef(DataInCell,0) of

    0 : DataInCell := '';

    1 : DataInCell := '1.은행';

    2 : DataInCell := '2.단자';

    3 : DataInCell := '3.기타';

    end;

    // 가운데 정렬을 위한 소스

    Left := Rect.Left + ((Rect.Right-Rect.Left) - TextWidth(DataInCell)) div 2;

    // 실지적으로 화면에 표시한다.

    TextRect(Rect, Left, Rect.Top+3, DataInCell);

    end;

    end;

    end;



    두 예제 소스로 하나로 하면 아래에서 원하는 결과를 볼 수 있습니다..



    수고..

    까마귀 wrote:

    > 안녕하세요. 까마귀입니다.

    > 일주일중 죽을 확률이 가장 낮다는 화요일입니다. 아무렇게나 딩굴어도 되겠네요.

    >

    > 스트링 필드의 데이터를 DBGrid에 나타내려고 하는데요.

    > 들어있는 값은 전부 숫자라서 ','를 표시하려고 합니다.

    > 자리수에 맞게만 표시를 하려고 하니까 조금 난감하네요.

    > DisplayFormat등의 옵션도 없고, TField의 출력형태를 변경하려고 해도, 않되고요.

    > (Query1.FieldByName('BMan') As TFloatField).DisplayFormat := '#,###';

    > 위처럼 했는데 에러만 나네요.

    > Query를 사용해서 그런건가요? SQL을 연결해서 쓰기 때문에 Table 콤포넌트는 못쓰는데...

    > 참 이것은 DBGrid상에서 표시되는 데이터입니다.

    > 아시는 분 가르쳐주시면 감사하겠습니다.

    > 꾸벅~~~~...

    >

    >

    >

    > 위대한 단군혼이 살아있는 나라.... 대한민국.