全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1300
推到 Plurk!
推到 Facebook!

請問stringgrid內如何列出不重覆的品項?

答題得分者是:cancer
eva_hsieh
一般會員


發表:5
回覆:6
積分:2
註冊:2011-04-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-04-24 21:12:27 IP:114.32.xxx.xxx 訂閱
請問各位大大~
我已利用stringgrid將相同品項之數量累加了(程式碼如下/或許做法不是很聰明的)~
處理完後它卻顯示很多次重覆的加總(如圖檔)~
我想過在處理累加動作時將stringgrid內剛處理過的row整個刪除~
但我找不到方式刪除~請問各位大大有更好的建議嗎?謝謝~

[code delphi]
procedure TForm1.Button2Click(Sender: TObject);
var x,y,i,j,z: integer;
str,str1: string;
qty: integer;
begin //我利用兩個stringgrid處理
y:=stringgrid1.ColCount; //指我將txt「,」分隔的資料放在stringgrid1內
x:=stringgrid1.RowCount;

j:=1;
for i:=1 to x do
begin

str:=stringgrid1.Cells[j-1,i-1];
str:=str stringgrid1.Cells[j,i-1];

z:=1;
qty:=0;
while z < x 1 do
begin

str1:=stringgrid1.Cells[j-1,z-1];
str1:=str1 stringgrid1.Cells[j,z-1];

if str=str1 then
begin
qty:=qty strtoint(stringgrid1.Cells[j 1,z-1]); //針對相同品項之數量做累加
end;
inc(z);

end;
stringgrid2.ColCount:=y;
stringgrid2.RowCount:=x;

stringgrid2.Cells[j-1,i-1]:=stringgrid1.Cells[j-1,i-1];
stringgrid2.Cells[j,i-1]:=stringgrid1.Cells[j,i-1];
stringgrid2.Cells[j 1,i-1]:=inttostr(qty);

end;
end;
[/code]
附加檔案:4db421bb4de86_問題.jpg
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-04-26 01:15:22 IP:118.169.xxx.xxx 未訂閱
像你這麼複雜的內容, 其實我會建議使用另外的暫存資料庫把stringgrid 內容丟入處理好後, 再整個重新建立stringgrid 表, 會比任何刪除動作來的簡單, 快, 又不容出錯!
===================引 用 eva_hsieh 文 章===================
請問各位大大~
我已利用stringgrid將相同品項之數量累加了(程式碼如下/或許做法不是很聰明的)~
處理完後它卻顯示很多次重覆的加總(如圖檔)~
我想過在處理累加動作時將stringgrid內剛處理過的row整個刪除~
但我找不到方式刪除~請問各位大大有更好的建議嗎?謝謝~


cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-04-27 14:08:00 IP:220.128.xxx.xxx 未訂閱
在文字檔打了一下,未測試過,您試看看

procedure ReLoadStringGrid(FileName, Delimit : string); //檔名,分隔符號
var FileList, TempList, list : TStringlist;
KeyName : string;
i, j, k, y : integer;
begin
FileList := TStringlist.Create;
TempList := TStringlist.Create;
list := TStringlist.Create;
FileList.LoadFromFile(FileName);
for i FileList.Count - 1 do
begin
if Trim(FileList[i]) = '' then Continues;
TempList.Text := StringReplace(FileList[i], Delimit, #13#10, [rfReplaceAll]);
if TempList.Count < 3 then Continue;
KeyName := TempList[0] Delimit TempList[1];
if TryStrToInt(TempList[2], j) then
begin
k := StrToIntDef(list.Values[KeyName], 0);
list.Values[KeyName] := IntToStr(j k); // 加總到 list,eg. CH,A01=5
end;
end;

StringGrid.RowCount = list.Count;
for y := 0 to list.Count -1 do // list 輸出到 StringGird
begin
KeyName := list.Names[i];
Templist.Text := StringReplace(KeyName, Delimit, #13#10, [rfReplaceAll]);
StringGrid[0, y] := Templist[0];
StringGrid[1, y] := Templist[1];
StringGrid[2, y] := StrToInt(list.Values[KeyName]);
end;
list.Free;
TempList.Free;
FileList.Free;
end;
編輯記錄
cancer 重新編輯於 2011-04-27 00:10:10, 註解 無‧
cancer 重新編輯於 2011-04-27 00:11:38, 註解 無‧
eva_hsieh
一般會員


發表:5
回覆:6
積分:2
註冊:2011-04-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-05-06 00:19:05 IP:61.218.xxx.xxx 訂閱
您好~謝謝您的答覆~我會再試試看您說的寫法~
也謝謝您給我另一個思考的方向~ ^^
系統時間:2024-03-29 14:46:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!