ListView add in mehrern if abfragen.

Ich hab dir ein kleines Testprojekt gebaut, da hast du ein wenig zu lernen. Probiers zuerst aus und dann schau dir den Source an. Ist zwar nicht 100%ig sauber, da ichs in ein paar Minuten zusammengebaut habe, aber sollte dir auf jeden Fall bezüglich OOP weiterhelfen und eventuell auch die eine oder andere Frage zu deinem Problem lösen.

Wenn du die Daten aus einem Textfile ausliest, dann solltest du auch sehen wo genau du ansetzen musst.
 

Anhänge

Ich find das Anzeigen der ObjektPropertys im ListView via PropertyInfo abzufackeln
ein bissel zu heftig für Ihn.
Er hat schon eine fertige PlayerCollection samt BeispielCode zum ausprobieren.
Schau Dir mal bitte mein [post=1214373]Beispiel[/post] an.
Bin mir sicher es dort ganz einfach veranschaulicht zu haben.
Vor allen Dingen das Erzeugen von neuen ListView Elementen. ;)
 
Die Collection selbst ist ganz nett, den Rest finde ich persönlich nicht so besonders.

Bei mir hat er den Vorteil, dass er alles was er von meinem BaseObject ableitet in die ListView knallen kann, ohne sich irgendwelche Gedanken darüber machen zu müssen. Natürlich ist diese Variante auch erweiterbar und da gäbe es noch viele Features - keine Frage.

So schwierig ist es dann auch wieder nicht und wenn es ihn interessiert, wird er es sich angucken und daraus lernen.
 
Norbert Eder hat gesagt.:
Die Collection selbst ist ganz nett, den Rest finde ich persönlich nicht so besonders.

Bei mir hat er den Vorteil, dass er alles was er von meinem BaseObject ableitet in die ListView knallen kann, ohne sich irgendwelche Gedanken darüber machen zu müssen. Natürlich ist diese Variante auch erweiterbar und da gäbe es noch viele Features - keine Frage.
Danke für die Blumen. :)
Natürlich ist deine Dynamische Variante, ListView Elemente anzuzeigen,
die eleganteste. ;-)
Nur hab ich die Befürchtung gehabt, dass die Technik für ihn schwerer zu verstehen ist.
Daher hab ich es auch statisch gemacht,
damit er sich erstmal mit der OO der PlayerCollection ansich auseinandersetzen kann.
Norbert Eder hat gesagt.:
So schwierig ist es dann auch wieder nicht und wenn es ihn interessiert, wird er es sich angucken und daraus lernen.
Für uns sicher nicht, aber für jemand mit wenig OOP Kenntnissen harter Tobak.
Aber wenn man sich mit der OOP auseinander setzt und viel ausprobiert,
ist man irgend wann in der Lage sich das ganze im Kopf vorzustellen
und wird es auch immer so umsetzen, da es einen für die Zukunft Arbeit erspaart.

MfG, cosmo
 
Ich denke, er sollte selbst entscheiden ob er es sich ansieht bzw. verwendet. Da lange drüber zu diskutieren macht eher weniger Sinn. Wenn er dazu Fragen hat, dann wird er diese auch stellen und wir können ihm entsprechend weiterhelfen.
 
Hallo,

Vielen vielen Dank ersteinmal für eure Hilfe und Mühen.
Es ist wirklich sehr schwer deinen Code nach zuvollziehen Norbert Eder. Aber nichts desdo trotz, werde ich mein Bestes geben und es einmal versuchen. Ich Probier es lieber und kapituliere dann, wenn es denn so sein soll, als vorher zu kapitulieren ohne es wenigstens Probiert zu haben.
Eine Frage hätte ich aber schoneinmal, auch wenn ich dein Programm bis jetzt nur überflogen habe. Das woran ich absolut scheitere, klappt bei dein Programm aber bei meinem nicht.
Dein Code (ohne Schleifen)
Code:
ListViewItem lvi = null;
lvi = new ListViewItem(pi.GetValue(o,null).ToString());
lvi.SubItems.Add(pi.GetValue(o,null).ToString());
Mein Code
Code:
ListViewItem inhalte = null;
inhalte = new ListViewItem(splittedSpieler[i3],0);
inhalte.SubItems.Add(splittedSpieler[i3]);
Auch wenn ich statts dem splittedSpieler Array nur einen Text reinsetze zum Testen, wird es aber im Listview nicht angezeigt. Und auch wenn ich das ohne meine Klammern probiere, bleibt es immer leer.
Kannst du mir vielleicht sagen was ich falsch mache?

Vielen Dank nocheinmal und viele Grüße.
Fridulin

PS: Ich kann wohl erst Montag wieder Antworten bzw. es testen, erst dann bin ich wieder Zuhause.
 
Weißt du das ListViewItem der Listview auch zu? Das könnte schon mal ein Grund sein. Das ",0" kannst du bei der Instanzierung des ListViewItems auch weglassen. Ansonsten kann ich aufgrund der paar Codefetzen nicht besonders viel was sagen.
 
Du meinst das "list_spieler.Items.Add(inhalte);" das mache ich natürlich.
Ich Poste dir hier meinen Code mit den Schleifen:
Code:
			ListViewItem inhalte = null;
	
			
			foreach (string entry in splittedData)
			{
				
				
				if (splittedSpieler[i].StartsWith(@"player_"))
				    {
					int i3 = i + 1;
					//spielername[i] = splittedSpieler[i3];
					//list_spieler.Items.Add(splittedSpieler[i3]);
					//list_spieler.Items.Add(splittedSpieler[i3]);
					
					inhalte = new ListViewItem(splittedSpieler[i3]);
				    }
				
				if (splittedSpieler[i].StartsWith(@"frags_"))
				    {
					int i3 = i + 1;
					
				//	ListViewItem item = new ListViewItem("");
				//	item.SubItems.Add(splittedSpieler[i3]);
				//	list_spieler.Items.Add(item);
				
					inhalte.SubItems.Add(splittedSpieler[i3]);
				//	list_spieler.Items.Add(splittedSpieler[i3]);
				
					//list_spieler.Items.Add(inhalte);
					  }	
				
					if (splittedSpieler[i].StartsWith(@"deaths_"))
				    {
					int i3 = i + 1;
					//inhalte.SubItems.Add(splittedSpieler[i3]);
					//list_spieler.Items.Add(inhalte);
					//MessageBox.Show(splittedSpieler[i3]);
					}
				
					if (splittedSpieler[i].StartsWith(@"ping_"))
				    {
					int i3 = i + 1;
					//inhalte.SubItems.Add(splittedSpieler[i3]);
					//MessageBox.Show(splittedSpieler[i3]);
					}
			

	inhalt_form.Text = splittedSpieler[i] + Environment.NewLine + inhalt_form.Text;

	i++;
		
		
		}
		
		list_spieler.Items.Add(inhalte);

Viele Grüße
Fridulin
 
Ich habe das jetzt hinbekommen und es funktioniert, wunderbar. Ich weiß nicht wieso, aber wenn man "list_spieler.Items.Add(inhalte);" in irgendeine if Schleife in der for Schleife hinein tut, dann listet er es wunderbar auf.

Ich Poste hier nochmal den Code, wenn du weißt wieso er es so auflistet, währe es sehr nett wenn du es mir hier mitteilen könntest. Ich bin nämlich sehr Neugirig.

Mein Code:
Code:
ListViewItem inhalte = null;
			
			int i4=0;
			
			foreach (string entry in splittedData)
			{
				
				
				if (splittedSpieler[i].StartsWith(@"player_"))
				    {
					int i3 = i + 1;
					inhalte = new ListViewItem(i4 + "");
					inhalte.SubItems.Add(splittedSpieler[i3]);
					i4++;
				    }
				
				if (splittedSpieler[i].StartsWith(@"frags_"))
				    {
					int i3 = i + 1;
					
					inhalte.SubItems.Add(splittedSpieler[i3]);
					list_spieler.Items.Add(inhalte);
					  }	
				
					if (splittedSpieler[i].StartsWith(@"deaths_"))
				    {
					int i3 = i + 1;
					inhalte.SubItems.Add(splittedSpieler[i3]);
					}
				
					if (splittedSpieler[i].StartsWith(@"ping_"))
				    {
					int i3 = i + 1;
					inhalte.SubItems.Add(splittedSpieler[i3]);
					
					}
		

	inhalt_form.Text = splittedSpieler[i] + Environment.NewLine + inhalt_form.Text;

	i++;
		
		
		}

Vielen Dank noch einmal für deine Hilfe und auch für dein Programm. Ich währe sonst nicht darauf gekommen.
Wie schon erwähnt ich kann jetzt erst Montag, denke ich, wieder Antwort bzw. erst da bin ich wieder an meinem Computer.

Viele Grüße
Fridulin
 
Hi!

Sag mal Norbert, wie kommts das Du Dir das hier anschaust und selber keinen Krampf bekommst,
den Code zu verstehen. :confused:
Fridulin, gewöhn Dir doch bitte mal an verbale Bezeichner zu verwenden. Ich bekomm langsam ne Meise... :rolleyes: :-( :D
Wenn man das liest weiss man nie was grad gezählt wird. Ich hab zu tun das simple abrattern der ArrayEinträge zu verstehen. :-(
---------------------------

i4 und i werden innerhalb deines Durchlaufs jeweils einmal inkrementiert.
Also kannst Dir einen Zähler spaaren. ;) int i3 ist überflüssig. i + 1 ansich hätt es auch getan (!)
Dann iterierst Du durch splittedData obwohl der entry nie verwendet wird. :confused:
Würde Dir hier nicht eine for-Schleife genau das bieten was Du eigentlich machen willst? ;)
Dein gesamtes Konstukt versucht krampfhaft das zu tun, was eine for-Schleife spielend
mit einem Stepping in höhe der Anzahl der Datensatzstellen schafft.

Die Variante hab ich Dir schon [post=1214515]gepostet[/post].
Nur hatte ich da die ArrayEinträge erstmal in einer sortierbaren Objektsammlung untergebracht. :rolleyes:
Da hättest auch den Vorteil, dass Du die SpielerDaten während des Speicherns auf Korrektheit überprüfen kannst.
Somit hättest den Code wieder sauber getrennt. :)

Ich hab hier mal ein kleines Beispiel ohne die Objektsammlung.
Getestet hab ichs nicht, es sollte Dir aber aufzeigen was ich mein.
Die Indexer musst sicher noch anpassen (!)
C#:
for ( int i = startIndex; i < splittedSpieler.Length; i += 8 ){

	inhalte = new ListViewItem( i );
	inhalte.SubItems.Add( splittedSpieler[ i + 1] ); //Name
	inhalte.SubItems.Add( splittedSpieler[ i + 3] ), //Frags
	inhalte.SubItems.Add( splittedSpieler[ i + 5] ), //Deaths
	inhalte.SubItems.Add( splittedSpieler[ i + 7] ); //Ping
}
So und jetzt eine ganz prägnante Frage: Kannst Du jetzt die ListViewItems benutzdefiniert sortieren?;-]
Wenn Du das sauber erreichen willst, nimmst lieber die PlayerCollection. :)

MfG, cosmo
 
Zurück