Laden...

Werte Suchen

Erstellt von Benscene vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.745 Views
B
Benscene Themenstarter:in
11 Beiträge seit 2008
vor 15 Jahren
Werte Suchen

Hallo ich bins nochmal...und zwar habe ich bisher ein programm geschrieben, welches verschiedene kundendaten in eine text datei speichert. Desweiteren soll man diese datei aber auch auslesen können und darin liegt das problem....

Wenn ich viele datensätze gespeichert habe, d.h von 6 verschiedenen kunden gibt er mir immer die letzte aus..am besten wäre ein suchfeld indem der benutzer nach der kundennummer suchen könnte..

zur hilfe mein bisheriger quelltext:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.IO;

namespace kundendaten
{
	/// <summary>
	/// Description of MainForm.
	/// </summary>
	public partial class MainForm : Form
	{
		public MainForm()
		{
			//
			// The InitializeComponent() call is required for Windows Forms designer support.
			//
			InitializeComponent();
			
			//
			// TODO: Add constructor code after the InitializeComponent() call.
			//
		}
		
		void TextBox1TextChanged(object sender, EventArgs e)
		{
			
		}
		
		void Label8Click(object sender, EventArgs e)
		{
			
		}
		
		void BnSpeichernClick(object sender, EventArgs e)
		{
			
			StreamWriter schreiber;
			schreiber=new StreamWriter(Application.StartupPath + "Kundendaten.txt",true);
			
			
			
			String Name;
		String Vorname;
		String Geburtsdatum;
		String Kundennummer;
		String Postleitzahl;
		String Straße;
		String Hausnummer;
		String Telefonnummer;
		
		Name= System.Convert.ToString(EdtName.Text);
		Vorname=System.Convert.ToString(EdtVorname.Text);
		Geburtsdatum=System.Convert.ToString(EdtGeburtsdatum.Text);
		Kundennummer=System.Convert.ToString(EdtKundennummer.Text);
		Postleitzahl=System.Convert.ToString(EdtPostleitzahl.Text);
		Straße=System.Convert.ToString(EdtStraße.Text);
		Hausnummer=System.Convert.ToString(EdtHausnummer.Text);
		Telefonnummer=System.Convert.ToString(EdtTelefonnummer.Text);
		
		schreiber.WriteLine("Name:" + Name + "," + "Vorname:" + Vorname + "," + "Geburtsdatum:" + Geburtsdatum + "," + "Kundennummer:" + Kundennummer + "," + "Postleitzahl:" + Postleitzahl + "," + "Straße:" + Straße + "," + "Hausnummer:" + Hausnummer+"," + "Telefonnummer:" + Telefonnummer);
			
		
		
		schreiber.Close();
			schreiber.Dispose ();
		
		
		
		}
		
		
		void BnLadenClick(object sender, EventArgs e)
		{
			
			StreamReader reader = new StreamReader(Application.StartupPath+ "Kundendaten.txt");
			
		
			
			
			do
			{
				String [] zeile= reader.ReadLine().Split(',');
				
				String Name = zeile[0];
                String Vorname = zeile[1];
                String Geburtsdatum = zeile[2];
                String Kundennummer = zeile[3];
                String Postleitzahl = zeile[4];
                String Straße = zeile[5];
                String Hausnummer = zeile[6];
                String Telefonnummer =zeile[7];
                
                EdtName.Text=Name;
			    EdtVorname.Text=Vorname;
			    EdtGeburtsdatum.Text=Geburtsdatum;
			    EdtKundennummer.Text=Kundennummer;
			    EdtPostleitzahl.Text=Postleitzahl;
			    EdtStraße.Text=Straße;
			    EdtHausnummer.Text=Hausnummer;
			    EdtTelefonnummer.Text=Telefonnummer;
                
			
                
			
			
			
			
			} 
			while (reader.Peek() != -1);

			reader.Close();
			
			
			
			
			
			
			
		}
		
		
	}
}

Ich hoffe auf hilfe von euch!!

würde mich sehr freuen
mfg rene

1.200 Beiträge seit 2007
vor 15 Jahren

Kannst du den Code bitte in C# Tags packen, so dass man sich das auch antun will?

Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!

YARRRRRR!

B
Benscene Themenstarter:in
11 Beiträge seit 2008
vor 15 Jahren

(sorry das ich frage, aber was ist ein c# tag?? X

P
58 Beiträge seit 2008
vor 15 Jahren

Bevor dein Code losgeht schreibst du: [CSHARP] und wenn er fertig ist: [/CSHARP]

C
49 Beiträge seit 2007
vor 15 Jahren

Hi,
also ich an deiner Stelle würde ein Object erstellen und für jedes Attribut eine Property setzen.
Dann befüllst du beim auslesen die Objekte und schreibst diese in eine List<T>.
Dann kannst du ja mit List<T>.Find() das Object aus der Liste holen das deine Bedignung erfüllt.

Cheers

www.nhu-gamedev.org
herbivore
"Windows ist ja immerhin ein Multitasting-System."

Mhhh... lecker 😁

B
Benscene Themenstarter:in
11 Beiträge seit 2008
vor 15 Jahren

habt ihr da vielleicht nen kurzes stück an quelltext gerade parat?? meine internet suche hat bisher nicht soo sehr viel ergeben... X(

L
770 Beiträge seit 2006
vor 15 Jahren

Dazu bräuchstest du nicht mal eine Liste, was aber natürlich schöner ist.

Dein ReadTxt Code macht ja genau das was du sagt, er lest Zeile für Zeile (DO While) und überschreibt natürlich bei jeder Zeile die Werte der Textbox.. Wenn du nach einer ID suchst wäre natürlich auch hier eine Abbruch Bedigung Möglich (IF).

Aber wie gesagt, List wäre schöner bzw solltest du das Einlesen überdenken, denn wie gesagt, du überschreibst ja immer die vorherigen Werte.

lg Lion

lg Lion

B
Benscene Themenstarter:in
11 Beiträge seit 2008
vor 15 Jahren

die aufgabe mit dem raussuchen habe ich schon gelöst, habe es auch mit while und eine if abfrage gemacht und finktioniert gut...jetzt ist die nächste aufgabe dran und zwar soll ich jetzt die daten die in der textdatei stehen in einem DataGrid anzeigen lassen.

Das ist erstmal der erste schritt..vielleicht habt ihr da ja ein paar infos zu

Aufjedenfall danke ich euch jetzt schonmal für die gute hilfe die ihr mir gegeben habt!

mfg rene

R
494 Beiträge seit 2006
vor 15 Jahren

Wenn du dir ein Kunde Objekt baust kannst du eine List<Kunde> oder Bindinglist<Kunde> einfach an das Grid binden.

Dass bei deinem Code immer das letztes angezeigt wird ist doch logisch, bei jedem Schleifendruchlauf ersetzt du das vorherige X(

🛈 📗 solltest du dir auch mal anschauen.

B
Benscene Themenstarter:in
11 Beiträge seit 2008
vor 15 Jahren

soo habs jetzt soweit gemacht, zwar nicht mit der liste, sondern so wie es mein "chef" mir gezeigt hatte...nur komischer weise steht im datagrid nichts drin wenn ich das programm öffne...von daher mal der quelltext, aber nur von der MainFormLoad. Also nur der teil von datagrid.


void MainFormLoad(object sender, EventArgs e)
		{
			try
			{
				String Name;
			    String Vorname;
			    String Geburtsdatum;
			    String Kundennummer;
			    String Postleitzahl;
			    String Straße;
			    String Hausnummer;
			    String Telefonnummer;
				int Adressenanzahl;
				int nix; //dummyvariable
				
				String [] Adressen;
			    Adressen=AdressenLaden();
			    
			    DataTable dt = new DataTable();
			    DataRow Zeile;
			    
			    dt.Columns.Add("Nachname");
			    dt.Columns.Add("Vorname");
			    dt.Columns.Add("PLZ");
			    Adressenanzahl=0;
			    Adressenanzahl = Adressen.GetLength(Adressenanzahl);
			    for (int i=0; i<Adressenanzahl ; i++){
			    	Zeile=dt.NewRow ();
			        String [] Adresse= Adressen[i].Split(',');
					nix=0;
			    	nix=Adresse.GetLength (nix) ;
			    	if(nix!=8){
			    		//tuhe nix
			    	}else{
			    		Zeile["Nachname"]= Adresse[0];
			    		Zeile["Vorname"] = Adresse[1];
			    		Zeile["PLZ"] = Adresse[4];
			    	}
			    	
			    	
			    	/*Zeile["Straße"] = Adresse[5];
			    	Zeile["Hausnummer"] = Adresse[6];
			    	Zeile["Telefonnummer"] =Adresse[7];
			    	*/
			    	dt.AcceptChanges();
			    }
			}catch(Exception ex){
				MessageBox.Show (ex.Message + ex.Source );
			}
		}
	}
}

4.939 Beiträge seit 2008
vor 15 Jahren

Du mußt dem DataGrid (unter .NET 2.0 und höher solltest du aber besser ein DataGridView verwenden) noch deine Tabelle zuweisen:


datagrid.DataSource = dt;

Woher sollte das Grid es sonst wissen?

P.S. Die Zeile 'dt.AcceptChanges();' ist unnötig, da du ja gar keine Datenbank dahinterhängen hast.

Und statt GetLength(...) solltest du besser einfach das Property Length benutzen:


Adressenanzahl = Adressen.Length;

Du kannst dir dann eigentlich auch diese temporären Variable ganz sparen und direkt 'Adressen.Length' etc. benutzen.

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Benscene,

bitte nur ein Thema pro Thread. DataGrid gehört nach Windows Forms und damit nicht in diesen Thread in Basistechnologien. Siehe [Hinweis] Wie poste ich richtig? Punkt 1.2.

herbivore