탐욕 님이 쓰신 글 :
: cxGrid 에서 입력된 내용들을 버튼을 눌러서 오름 차순으로 정렬 및 내림차순으로 정렬 할려고 합니다.
:
: procedure TfrmMain.cxBtn_UpSortClick(Sender: TObject);
: var
: loop1,loop2 : integer;
: Imsi : TcxGridColumn;
:
: begin
: for loop1 := 0 to cxGrid_View.DataController.RecordCount - 2 do
: begin
: for loop2 := 1 to cxGrid_View.DataController.RecordCount - 1 do
: begin
: if cxGrid_View.DataController.Values[loop1,cxGrid_Sum] <
: cxGrid_View.DataController.Values[loop2,cxGrid_Sum] then
: begin
: Imsi := cxGrid_View.DataController.Values[loop1,cxGrid_Sum];
:
: cxGrid_View.DataController.Values[loop1,cxGrid_Sum] :=
: cxGrid_View.DataController.Values[loop2,cxGrid_Sum];
:
: cxGrid_View.DataController.Values[loop2,cxGrid_Sum] := Imsi;
: end; // if
: end; //for loop2
: end; //for loop1
: end;
:
: 굳이 함수를 만들지 않고 그냥 버튼 클릭 이벤트에서 처리를 할려고 했습니다.
:
: 저런 식으로 for문 2개를 돌리면서 비교하면서 할려구 하는데.. 잘 안되네요.
:
: 제가 잘못된 방향으로 나가고 있는지 어떤 부분을 놓치고 있는건지 잘 모르겠습니다.
:
: 그래서 선배님들에게 조언을 구할려구 합니다.
:
:
혼자서 해결했습니다. ㅎㅎ
cxGrid의 구조를 자세히 몰라서 빙빙돌다가 삽질 했습니다.
지금은 문제점 파악해서 정상 작동하는거 확인했습니다. 애초에 for문의 loop를 잘못 돌리고 있었네요 ㅠ_ㅠ/
- 고친 문장
procedure TfrmMain.cxBtn_UpSortClick(Sender: TObject);
var
loop1,loop2 : integer;
cx_Product, cx_Number : String;
cx_Amount,cx_Price,cx_Sum : double;
begin
for loop1 := 0 to cxGrid_View.DataController.RecordCount - 1 do
begin
for loop2 := loop1 + 1 to cxGrid_View.DataController.RecordCount - 1 do
begin
if (cxGrid_View.DataController.Values[loop1,cxGrid_Sum.Index] <
cxGrid_View.DataController.Values[loop2,cxGrid_Sum.Index]) then
begin
cx_Product := cxGrid_View.DataController.Values[loop1,cxGrid_Product.Index];
cx_Number := cxGrid_View.DataController.Values[loop1,cxGrid_Number.Index];
cx_Amount := cxGrid_View.DataController.Values[loop1,cxGrid_Amount.Index];
cx_Price := cxGrid_View.DataController.Values[loop1,cxGrid_Price.Index];
cx_Sum := cxGrid_View.DataController.Values[loop1,cxGrid_Sum.Index];
cxGrid_View.DataController.Values[loop1,cxGrid_Product.Index] :=
cxGrid_View.DataController.Values[loop2,cxGrid_Product.Index];
cxGrid_View.DataController.Values[loop1,cxGrid_Number.Index] :=
cxGrid_View.DataController.Values[loop2,cxGrid_Number.Index];
cxGrid_View.DataController.Values[loop1,cxGrid_Amount.Index] :=
cxGrid_View.DataController.Values[loop2,cxGrid_Amount.Index];
cxGrid_View.DataController.Values[loop1,cxGrid_Price.Index] :=
cxGrid_View.DataController.Values[loop2,cxGrid_Price.Index];
cxGrid_View.DataController.Values[loop1,cxGrid_Sum.Index] :=
cxGrid_View.DataController.Values[loop2,cxGrid_Sum.Index];
cxGrid_View.DataController.Values[loop2,cxGrid_Product.Index] := cx_Product;
cxGrid_View.DataController.Values[loop2,cxGrid_Number.Index] := cx_Number;
cxGrid_View.DataController.Values[loop2,cxGrid_Amount.Index] := cx_Amount;
cxGrid_View.DataController.Values[loop2,cxGrid_Price.Index] := cx_Price;
cxGrid_View.DataController.Values[loop2,cxGrid_Sum.Index] := cx_Sum;
end; //if
end; //for loop2
end; //for loop3
end;
입니다. String그리드는 하나하나 지정해야 한다는군요.
참고하세요...
|