![]() |
Listbox mit StrinGrid vergleichen!?
hallo ich hab folgendes Problem,
ich habe eine Listbox mit verschiedenen Einträgen. Diese Einträge können per Doppelklick ins Stringgrid EINZELN hinzugefügt werden(allerdings wird NUR der Spaltentitel in die Listbox kopiert!). bis hierhin hab ich es schon allein hingekriegt, aber... Jetzt sollen zu jedem Eintrag in der Listbox, die dazugehörigen Spalten inkl. Spaltenüberschriften komplett in ein Memo kopiert werden! Dazu muss ich doch die String-Einträge der Listbox mit Spaltenüberschirften vergleichen und bei jedem gefundenen Übereinstimmung die komplette Spalte kopieren! Aber wie mache ich das? Hat jmd ein Codebeispiel? Kann mir einer dabei helfen ? |
Re: Listbox mit StrinGrid vergleichen!?
Hi,
versuche mal sowas:
Delphi-Quellcode:
Hab grad kein Delphi da, daher aus dem Kopf und ohne Gewähr// Y ist hier die jeweilige Spalte for x:= 1 to stringGrid.RowCount-1 do Memo.Text:= Memo.Text + StringGrid.Cells[x, y]+ #13#10; |
Re: Listbox mit StrinGrid vergleichen!?
Zitat:
und was bedeuten die Zeichen #13#10 ?? |
Re: Listbox mit StrinGrid vergleichen!?
Habe jetzt folgenden Code, aber es wird immer nur die Spaltenüberschirft ins memo geschrieben, nich die komplette Spalte...
Delphi-Quellcode:
wer weiß weiter ??
begin
for i:=0 to ListBox1.items.count-1 do // für jedes element der listbox begin for x:=0 to StringGrid1.ColCount-1 do // für jede Spalte des grids begin for y:=0 to StringGrid1.RowCount-1 do // für jede Zeile begin if ListBox1.items[i] = StringGrid1.cells[y,x] then begin vZeile := vZeile + StringGrid1.Cells[y,x] + vTrennzAus; memo1.Lines.Add(vZeile); vZeile := ''; end; end; end; end; end; |
Re: Listbox mit StrinGrid vergleichen!?
Delphi-Quellcode:
begin
for i:=0 to ListBox1.items.count-1 do // für jedes element der listbox begin for x:=0 to StringGrid1.ColCount-1 do // für jede Spalte des grids begin for y:=0 to StringGrid1.RowCount-1 do // für jede Zeile begin if ListBox1.items[i] = StringGrid1.cells[y,x] then begin . . . for y := global_col to StringGrid1.Col do begin for x := 0 to StringGrid1.RowCount - 1 do begin vZeile := vZeile + StringGrid1.Cells[y,x] + vTrennzAus; end; memo1.Lines.Add(vZeile); vZeile := ''; end; end; end; end; end; end; Jetz hab ich das hier, aber es wird nur die Spalte ins Memo kopiert, die aktuell ausgewählt ist! Kann denn keiner helfen ??? :gruebel: |
Re: Listbox mit StrinGrid vergleichen!?
Oh, ich dachte das wär klar, und du müsstest nur noch die Spalte ins memo schreiben.#13#10 macht einen zeilenumbruch im memo, aber natürlich habe ich nicht an lines.add gedacht.
Delphi-Quellcode:
var mylbxText: string;
begin for i:=0 to ListBox1.items.count-1 do begin // für jedes element der listbox mylbxTEXT:= ListBox1.items[i].Text; //die Vairable mit dem aktuellen ListBoxeintrag füllen. Hab nicht ganz im kopf wie die Eigenschaft hier heisst. for x:=0 to StringGrid1.ColCount-1 do // für jede Spalte des grids if StringGrid1.cells[0,x] = mylbxText then // erste Zeile nach dem Listboxeintrag durchsuchen begin for y:= 0 to StringGrid1.RowCount-1 do memo1.Lines.Add(StringGrid1.cells[y,x]); end; end; |
Re: Listbox mit StrinGrid vergleichen!?
funzt auch nich!! :-(
so das hier is jetz der komplette code des buttonClick ereignis:
Delphi-Quellcode:
Der Fehler muss meiner Meinung nach hier liegen:
begin
for i:=0 to ListBox1.items.count-1 do // für jedes element der listbox begin for x:=0 to StringGrid1.ColCount-1 do // für jede Spalte des grids begin for y:=0 to StringGrid1.RowCount-1 do // für jede Zeile begin if ListBox1.items[i] = StringGrid1.cells[y,x] then begin if Edit2.Text = 'TAB' then vTrennzAus := chr(vk_tab) else vTrennzAus := Edit2.Text; for y := global_col to StringGrid1.Col do begin for x := 0 to StringGrid1.RowCount - 1 do begin vZeile := vZeile + StringGrid1.Cells[y,x] + vTrennzAus; end; memo1.Lines.Add(vZeile); vZeile := ''; end; end; end; end; end; end;
Delphi-Quellcode:
da eigentlich genau das gemacht wird was ich haben will, allerdings nur für die aktuell selektierte StringGrid-Spalte bzw Zelle...
for y := global_col to StringGrid1.Col do
Ich werd noch verrückt mit dem schiss hier |
Re: Listbox mit StrinGrid vergleichen!?
Leute kann mir denn keiner mehr helfen, das Programm ist soweit komplett fertig, nur noch dieser eine Fehler, ich muss es am 30.06. abgeben :-/
Delphi-Quellcode:
Zur Zeit wird der erste ListboxEintrag inkl. zugehörige Spalte ausm StringGrid 1x ins Memo geschrieben, der zweite Listboxeintrag 2mal, der dritte 3mal, etc ...
for i:=0 to ListBox1.items.count - 1 do // für jedes element der listbox
begin for x:=0 to StringGrid1.ColCount - 1 do // für jede Spalte des grids begin for y:=0 to StringGrid1.RowCount - 1 do // für jede Zeile begin if ListBox1.items[i] = StringGrid1.cells[y,x] then begin if Edit2.Text = 'TAB' then vTrennzAus := chr(vk_tab) else vTrennzAus := Edit2.Text; for j := Listbox1.ItemIndex to Listbox1.Items.IndexOf(StringGrid1.Cells[i,x])do //der Fehler müsste hier liegen !!?? begin for x := 0 to StringGrid1.RowCount do begin vZeile := vZeile + StringGrid1.Cells[i,x] + vTrennzAus; end; memo1.Lines.Add(vZeile); vZeile := ''; end; end; end; end; end; end; dafür wird der letzte und vorletzte gar nich mehr ins Memo geschrieben !?? |
Re: Listbox mit StrinGrid vergleichen!?
hi,
versuche mal
Delphi-Quellcode:
mal in
if ListBox1.items[i] = StringGrid1.cells[y,x] then
Delphi-Quellcode:
if ListBox1.items[i] = StringGrid1.cells[0,x] then
aendern, du willst ja nur die ueberschrift vergleichen und die steht in reihe 0 (bzw.1) oder nicht? , das ganze kannst du dann auch vor die letzte for schleife stellen |
Re: Listbox mit StrinGrid vergleichen!?
Also zuallererst blicke ich
Was bezwckst du denn mit folgender Zeile?
Delphi-Quellcode:
j wird später nicht benutzt, also wofür da ne for-Schleife? Diese Schleife dürfte wahrscheinlich der Grund für deine Wiederholungen sein. Ich schätze, weil du hinten i anstatt y geschrieben hast. Kann das sein? Ansonsten verstehe ich denn Sinn dieses Austausches nicht. Und warum arbeitest du hier überhaupt mit dem ItemIndex der ListBox?
for j := Listbox1.ItemIndex to Listbox1.Items.IndexOf(StringGrid1.Cells[i,x])do
Daß dir hier kaum einer hilft, dürfte daran liegen, daß man den Code einfach kaum verstehen kann. Sorry. Erklär doch nochmal ganz genau, was dein Code eigentlich machen soll. Auch aus deiner Erklärung im ersten Post werde ich nicht ganz schlau. Aber ich versuch mal trotzdem, es nochmal so widerzugeben, wie ich es verstanden habe. Du hast aus deinem Stringgrid bestimmte Spaltenüberschriften (fixed Columns?) in eine ListBox kopiert. Jetzt möchtest du, daß alle - in die ListBox eingefügten - Spalten in ein Memo geschrieben werden - als Zeilen. Soweit richtig? OK, versuchen wir mal, das logisch anzugehen. Du mußt also die Zeilen der ListView durchgehen, dann jeweils die Spalten des StringGrids. Und nur, wenn eine Übereinstimmung in der Überschrift besteht, mußt du auch die restlichen Zeilen des StringGrids betrachten.
Delphi-Quellcode:
Das hab ich jetzt in kurzer Zeit ungetestet hingeschludert, es sollte es aber im Groben tun. Wahrscheinlich hab ich allerdings trotzdem einige Fehlerchen eingebaut. Höchstwahrscheinlich soga dicke Verständnisfehler. Hab jetzt auch im Moment leider keine Zeit, da ich wegmuss, aber ich schaus mir nachher nochmal genauer an.
for i := 0 To ListBox1.Items.Count - 1 Do
for x := 0 To StringGrid1.ColCount - 1 Do If ListBox1.Items[i] = StringGrid1.Cells[0,x] Then begin vZeile := ''; for y := 0 To StringGrid1.RowCount - 1 Do begin if Edit2.Text = 'TAB' then vTrennzAus := chr(vk_tab) else vTrennzAus := Edit2.Text; vZeile := vZeile + StringGrid1.Cells[i,x] + vTrennzAus; end; memo1.Lines.Add(vZeile); end; |
Re: Listbox mit StrinGrid vergleichen!?
Hallo,
wenn ich dein Vorhaben richtig verstanden habe, ist der Ansatz von leddl schon mal gut. Es sind aber noch ein paar Fehler drin :?
Delphi-Quellcode:
änder das mal entsprechend der Kommentare ab, dann funktioniert es.
for i := 0 To ListBox1.Items.Count - 1 Do
for x := 0 To StringGrid1.ColCount - 1 Do //[Col,Row] hier wird nur auf die Col 0 zugegriffen If ListBox1.Items[i] = StringGrid1.Cells[0,x] Then //-->[x,0] begin vZeile := ''; for y := 0 To StringGrid1.RowCount - 1 Do begin //*************************************************** if Edit2.Text = 'TAB' then //wird bei jeder Leseschleife aufgerufen vTrennzAus := chr(vk_tab) //Edit2 ändert sich doch nicht else //also vor die Schleifen setzen vTrennzAus := Edit2.Text; //************************************************** //hier wird auf i=ListBox.Items und x= StringGrid.Cols zugegriffen vZeile := vZeile + StringGrid1.Cells[i,x] + vTrennzAus;//-->[x,y] end; memo1.Lines.Add(vZeile); end; |
Re: Listbox mit StrinGrid vergleichen!?
Da sieht man wieder, was bei Zeitdruck passiert. Natürlich muß das mit dem Edit vor die Schleifen. Das hab ich in der letzten Minute gerade noch per Copy&Paste eingefügt. Ebenso das mit i. Das is mir ja vorher bei seinem Code auch aufgefallen. Nur sollte man das dann im eigenen Code nach dem Kopieren auch ändern. :mrgreen:
Was [x,y] und [y,x] angeht: Da war ich mir nicht mehr sicher und konnte es wegen knapper Zeit auch nicht ausprobieren. Is es beim Stringgrid wirklich [x,y]? Ich hatte irgendwie im Kopf, daß es [y,x] war. Hab aber auch schon lange nichts intensives mehr mit nem StringGrid gemacht. Aber auf jeden Fall schön, daß es zumindest halbwegs richtig war. :lol: |
Re: Listbox mit StrinGrid vergleichen!?
Liste der Anhänge anzeigen (Anzahl: 1)
@Leddl
wenn ich mir deinen Code anschaue erscheint mir das ganze schon logisch, aber es passiert absolut GAR NIX wenn ich den Button klicke! :-( @Lannes, dein Code funzt leider auch nich auch wenn ich ihn etwas abändere, es tut sich auch hier GAR NIX ! :-( Zum Verständnis nochmal: - Per Doppelklick Füge ich einen StringGridZelleninhalt in eine Listbox (in diesem Fall die Spaltenüberschrift, kann aber auch ne x-beliebige andere Zeile sein, is ja mal egal!) - Wenn ich jetz den Button klicke soll der komplette Spalteninhalt, wo dieser Eintrag drin steht in das Memo geschrieben werden. (siehe Bildanhang) Auf dem Bild sieht man dass es teilweise funktioniert, allerdings werden einie Einträge doppelt, dreifach und aufm Bild bspw "Preis pro Anzahl" und "Warengruppe" gar nicht ins Memo geschrieben... Hoffe das ist jetz deutlich?? |
Re: Listbox mit StrinGrid vergleichen!?
:gruebel: Also nachdem ich mir das gar nicht vorstellen konnte, hab ich das jetzt glatt mal ausprobiert. Und tata, es tut genauso, wie (ich verstanden habe, daß) es soll.
Delphi-Quellcode:
Dadurch werden mir die Spalten, deren Überschriften in der ListBox stehen, ins Memo eingefügt... Und genau das wolltest du ja. Oder hab ich das jetzt doch wieder falsch verstanden? Also "nichts" passiert da auf jeden Fall nicht.
if Edit2.Text = 'TAB' then
vTrennzAus := chr(vk_tab) else vTrennzAus := Edit2.Text; for i := 0 To ListBox1.Items.Count - 1 Do for x := 1 To StringGrid1.ColCount - 1 Do If ListBox1.Items[i] = StringGrid1.Cells[x,1] Then begin vZeile := ''; for y := 1 To StringGrid1.RowCount - 1 Do begin vZeile := vZeile + StringGrid1.Cells[x,y] + vTrennzAus; end; memo1.Lines.Add(vZeile); end; //Edit: Ach, jetzt wird mir klar, was das Problem ist. Du hast dein StringGrid ja komplett umgestellt. Für Spaltenüberschriften gibts ja im Normalfall die FixedColumns. Damit (oder zumindest mit der ersten Reihe) haben wir gerechnet. Da du aber praktischerweise die erste Spalte und Zeile leergelassen hast, mußt du logischerweise die x- und y-Wert noch um 1 erhöhen. Ich hab das jetzt schonmal im Quellcode oben angepasst. So sollte es auch bei deinem StringGrid funktionieren... Jupp, tut! :mrgreen: |
Re: Listbox mit StrinGrid vergleichen!?
Zitat:
:bouncing4: :bounce1: Alter vielen Dank, ab heute nenn ich dich Delphi-Gott oder so, sag mir wo du wohnst ich spendier dir mal nen Kasten Bier! ;-) :cheers: Meine fresse ey wieso komm ich auf so nen scheiss denn niemals von alleine!?? :wall: Danke dir nochmals du hast mir praktisch soeben das Leben gerettet :thumb: P.S.: gibst du mir deine ICQ#? Kann dich evtl in zukunft öfter gebrauchen!? :twisted: |
Re: Listbox mit StrinGrid vergleichen!?
Zitat:
Zitat:
Zitat:
|
Re: Listbox mit StrinGrid vergleichen!?
Trotzdem nochmal danke für Alles !! :hello:
|
Re: Listbox mit StrinGrid vergleichen!?
Hallo,
Zitat:
Ich trink aber trotzdem 'ne Flasche Bier mit :cheers: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz