請問stringgrid內如何列出不重覆的品項? |
答題得分者是:cancer
|
eva_hsieh
一般會員 ![]() ![]() 發表:5 回覆:6 積分:2 註冊:2011-04-24 發送簡訊給我 |
請問各位大大~
我已利用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] ![]() |
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
像你這麼複雜的內容, 其實我會建議使用另外的暫存資料庫把stringgrid 內容丟入處理好後, 再整個重新建立stringgrid 表, 會比任何刪除動作來的簡單, 快, 又不容出錯!
===================引 用 eva_hsieh 文 章=================== 請問各位大大~ 我已利用stringgrid將相同品項之數量累加了(程式碼如下/或許做法不是很聰明的)~ 處理完後它卻顯示很多次重覆的加總(如圖檔)~ 我想過在處理累加動作時將stringgrid內剛處理過的row整個刪除~ 但我找不到方式刪除~請問各位大大有更好的建議嗎?謝謝~ |
cancer
高階會員 ![]() ![]() ![]() ![]() 發表:58 回覆:319 積分:190 註冊:2004-07-31 發送簡訊給我 |
在文字檔打了一下,未測試過,您試看看
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; |
eva_hsieh
一般會員 ![]() ![]() 發表:5 回覆:6 積分:2 註冊:2011-04-24 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |