Announcement

Collapse
No announcement yet.

DataBinding: Combobox/Textboxen befüllen aus txt-Datei?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DataBinding: Combobox/Textboxen befüllen aus txt-Datei?

    Hallo Leute,

    ich habe eine Textdatei mit folgendem Inhalt:

    387348;Name;Fachbereich;Beruf

    Mittels der Split-Methode wird nur der Name in der ComboBox angezeigt. Soweit ist alles richtig. Nun soll aber der Rest der Zeile in labels unter der ComboBox angezeigt werden. Ist das mit DataBinding umzusetzen? Wenn ja, könnte mir jemand einen denkanstoß geben? Ich versuche mich da gerad einzulesen aber im zusammenhang mit meinem Problem weiß ich nicht wie ich anfangen soll. Hilfe wäre nett...

    MFG

  • #2
    Hallo,

    schau dir mal dieses Bsp an:
    Code:
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
    	public partial class Form1 : Form
    	{
    		public Form1()
    		{
    			InitializeComponent();
    		}
    
    		private void button1_Click(object sender, EventArgs e)
    		{
    			// Prüfen ob die Datei existiert:
    			if (File.Exists("TextFile1.txt"))
    			{
    				// StreamReader zur Datei erzeugen:
    				StreamReader sr = new StreamReader("TextFile1.txt");
    
    				// 1. Zeile enthält Spaltenüberschriften. Werden nicht
    				// im Datenbestand benötigt -> Dummy-Einlesevorgang:
    				sr.ReadLine();
    
    				// Mittels LINQ die Daten lesen:
    				var query =
    					(from field in LoadFile(sr, ";")
    					 select new
    					 {
    						 ID = field[0],
    						 Name = field[1],
    						 Fachbereich = field[2],
    						 Beruf = field[3]
    					 }).ToList();
    
    				// Leere-Auswahl zur Liste hinzufügen:
    				query.Insert(0, new
    					{
    						ID = string.Empty,
    						Name = "-",
    						Fachbereich = string.Empty,
    						Beruf = string.Empty
    					});
    
    				// Daten an die ComboBox binden:
    				comboBox1.DisplayMember = "Name";	// was angezeigt wird
    				comboBox1.ValueMember = "ID";		// was als Wert verwendet wird
    				comboBox1.DataSource = query;		// die Datenquelle
    
    				// Auswahl der Combo-Box an die TextBoxen binden.
    				// Als 'dataSource' könnte auch die zugrunde liegende
    				// Abfrage verwendet werden -> da dies eine Verweistyp
    				// ist verweist 'comboBox1.DataSource' auf 'query'
    				// und ist somit gleichbedeutend
    				textBox1.DataBindings.Clear();
    				textBox1.DataBindings.Add(
    					"Text",							// Eingenschaft die gebunden werde soll
    					comboBox1.DataSource,			// Datenquelle
    					"ID");							// Eigenschaft der Datenquelle die angezeigt weren soll
    
    				textBox2.DataBindings.Clear();
    				textBox2.DataBindings.Add(
    					"Text",
    					comboBox1.DataSource,
    					"Fachbereich");
    
    				textBox3.DataBindings.Clear();
    				textBox3.DataBindings.Add(
    					"Text",
    					comboBox1.DataSource,
    					"Beruf");
    			}
    		}
    
    		/// <summary>
    		/// Gibt die Zeilen der CSV-Datei zurück
    		/// </summary>
    		/// <param name="sr">
    		/// StreamReader zur CSV-Datei
    		/// </param>
    		/// <param name="delim">
    		/// Trennzeichen in der CSV-Datei
    		/// </param>
    		/// <returns>
    		/// Zeilen der CSV-Datei
    		/// </returns>
    		private static IEnumerable<string[]> LoadFile(StreamReader sr, string delim)
    		{
    			while (sr.Peek() != -1)
    				yield return sr.ReadLine().Split(delim.ToCharArray());
    		}
    	}
    }
    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Danke für deine schnelle Antwort.
      Irgendwie klappt das nicht so wie ich das möchte

      Code:
      var query =
      (from field in LoadFile(sr, ";")
      select new
      {
          ID = field[0],
          Name = field[1],
          Fachbereich = field[2],
          Beruf = field[3];
      }).ToList();
      splittet der da die textdatei schon und packt sie in ein array?
      wie übergebe ich sie den nachher an labels?

      Comment


      • #4
        Hallo,

        Code:
        from field in LoadFile(sr, ";")
        Die Methode LoadFile(sr, ";") liest die Datei zeilenweise ein und splittet sie bei allen ";" so dass ein string[] zurückgegeben wird.

        Es wird nicht an Labels gebunden sondern an TextBoxen über die DataBindings-Eigenschaft (wie im Beispiel - ist alles kommentiert).

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment

        Working...
        X