Announcement

Collapse
No announcement yet.

VB 2005 EE - ComboBox2-Inhalt abhängig von vorheriger Auswahl in ComboBox1

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

  • VB 2005 EE - ComboBox2-Inhalt abhängig von vorheriger Auswahl in ComboBox1

    Hallo an Alle,

    Vorweg, ich arbeite mich gerade etwas in VB 2005 EE ein und habe kaum Erfahrung.
    Im wesentlichen geht es um ein kleines Programm, welches die Verwaltung von Boards händeln soll. Die grobe Struktur: Es gibt Themengebiete, zu den jeweiligen Themengebieten gehören Tester (Hardware zum testen von Schaltkreisen) und zu den jeweiligen Testern gibt es Adapter-Boards (zum Kontaktieren der zu testenden ICs - bauformabhängig).
    Bei meinem bisherigen Projekt habe ich unter anderem eine ComboBox. Hier wird gewählt um welchem Themenbereich es sich handelt. In einer zweiten ComboBox wird ausgewählt, welcher Tester dafür in Frage kommt. In der dritten ComboBox wird nun gewählt, welches Adabter-Board man einsetzen möchte. Das ganze funktioniert bisher auch, nur gibt es folgendes Problem:

    Ich wähle Themengebiet TH1 aus. Danach kann ich in der zweiten ComboBox zwischen den Testern T1 bis T5 wählen. Weiterhin kann ich dann in der dritten ComboBox ein Adapter-Board von AB1 bis AB10 auswählen. Dass bei der Wahl eines Testers eine Fehlermeldung kommt, wenn man vorher noch kein Themengebiet in ComboBox1 zugewiesen hat, habe ich bereits erfolgreich realisiert. Jedoch möchte ich, dass der Inhalt der ComboBox zur Testerwahl beispielsweise auf T1 bis T3 beschränkt ist, wenn man TH1 als Themengebiet geählt hat. Die Tester T4 bis T5 sind dementsprechend nur aus ComboBox2 wählbar, wenn man in ComboBox1 das Themengebiet TH2 ausgewählt hat. Eine Zuordnung für die Adapter-Boards zu den Testern könnte dann dementsprechend so aussehen.

    T1 --> AB1 & AB5
    T2 --> AB2
    T3 --> AB4 & AB6
    T4 --> AB3, AB7 & AB10
    T5 --> AB8 & AB9

    Nun meine eigentliche Frage. Wie ist es denn möglich, den Inhalt einer ComboBox von der Auswahl (die in einer anderen ComboBox gemacht wurde) einer anderen ComboBox abhängig zu machen? Es kann ja auch sein dass es hierfür einen gänzlich anderen Weg gibt, den ich aber noch nicht kenne. Aufgrund meiner geringen Kenntnisse würde ich mich über eine detailierte Antwort freuen.

    Gruß TeX

  • #2
    Hallo,
    >...einer anderen ComboBox abhängig zu machen?
    wenn alle ComboBox-Instanzen über die Datenbindung an eine <b>DataView</b>-Komponente angebunden werden, die wiederum die Daten aus einer DataSet-Instanz (in Funktion einer "In-Memory-Tabelle") holt, lassen sich die Anforderungen einfach (und zudem elegant) umsetzen. Es reicht dann aus, beim DataView über die Eigenschaft <b>RowFilter</b> ein Filterkriterium zu setzen - alle angebundenen Controls (ComboBox) zeigen dann nur die "Datensätze" an, die dem Filterkriterium entsprechen. Da das DataSet ("In-Memory-Tabelle") die Daten aus einer XML-Datei lesen und schreiben kann, steht somit auch ein Weg zur Verfügung, um die Schaltkreisdaten flexibel erweitern zu können

    Comment


    • #3
      Hallo Andreas,

      vielen Dank für Deine Antwort. Ich werde versuchen mittels Fachliteratur Deine antwort nachzuvollziehen und zu verstehen. Zugegeben verstehe ich zwar prinzipiell was Du vorschlägst, jedoch kann ich es nicht umsetzten, da ich noch nicht genug Kenntnisse habe.

      Gruß Te

      Comment


      • #4
        Hallo,
        das folgende Beispiel demonstriert das Prinzip. Das Beispiel kann mit Visual Studio 2005 über ein typisiertes DataSet noch eleganter implementiert werden - aber in der Quelltext-Darstellung ist das untypisierte Dataset einfacher:

        <div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"><p style="margin: 0px;"><span style="color: blue;">Imports</span> System.Data</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: blue;">Public</span> <span style="color: blue;">Class</span> Form1</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">Private</span> aDS <span style="color: blue;">As</span> <span style="color: blue;">New</span> DataSet</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">Private</span> aDV <span style="color: blue;">As</span> <span style="color: blue;">New</span> DataView</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">Private</span> <span style="color: blue;">Sub</span> Form1_Load(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span> System.Object, <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> System.EventArgs) <span style="color: blue;">Handles</span> <span style="color: blue;">MyBase</span>.Load</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> aNewDT <span style="color: blue;">As</span> <span style="color: blue;">New</span> DataTable()</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.TableName = <span style="color: maroon;">"CB1"</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.Columns.Add(<span style="color: maroon;">"Eintrag"</span>, <span style="color: blue;">GetType</span>(<span style="color: blue;">String</span>))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.Columns.Add(<span style="color: maroon;">"Kategorie"</span>, <span style="color: blue;">GetType</span>(<span style="color: blue;">String</span>))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.PrimaryKey = <span style="color: blue;">New</span> DataColumn() {aNewDT.Columns(<span style="color: maroon;">"Eintrag"</span>)}</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.MinimumCapacity = 10</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.Rows.Add(<span style="color: blue;">New</span> <span style="color: blue;">Object</span>() {<span style="color: maroon;">"Eintrag A1"</span>, <span style="color: maroon;">"A"</span>})</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.Rows.Add(<span style="color: blue;">New</span> <span style="color: blue;">Object</span>() {<span style="color: maroon;">"Eintrag A2"</span>, <span style="color: maroon;">"A"</span>})</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.Rows.Add(<span style="color: blue;">New</span> <span style="color: blue;">Object</span>() {<span style="color: maroon;">"Eintrag A3"</span>, <span style="color: maroon;">"A"</span>})</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.Rows.Add(<span style="color: blue;">New</span> <span style="color: blue;">Object</span>() {<span style="color: maroon;">"Eintrag B1"</span>, <span style="color: maroon;">"B"</span>})</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.Rows.Add(<span style="color: blue;">New</span> <span style="color: blue;">Object</span>() {<span style="color: maroon;">"Eintrag B2"</span>, <span style="color: maroon;">"B"</span>})</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' </span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDS.Tables.Add(aNewDT)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">'</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT = <span style="color: blue;">New</span> DataTable()</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.TableName = <span style="color: maroon;">"CB2"</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.Columns.Add(<span style="color: maroon;">"Eintrag"</span>, <span style="color: blue;">GetType</span>(<span style="color: blue;">String</span>))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.Columns.Add(<span style="color: maroon;">"Kategorie"</span>, <span style="color: blue;">GetType</span>(<span style="color: blue;">String</span>))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.PrimaryKey = <span style="color: blue;">New</span> DataColumn() {aNewDT.Columns(<span style="color: maroon;">"Eintrag"</span>)}</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.MinimumCapacity = 10</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.Rows.Add(<span style="color: blue;">New</span> <span style="color: blue;">Object</span>() {<span style="color: maroon;">"Untereintrag A1"</span>, <span style="color: maroon;">"A"</span>})</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.Rows.Add(<span style="color: blue;">New</span> <span style="color: blue;">Object</span>() {<span style="color: maroon;">"Untereintrag A2"</span>, <span style="color: maroon;">"A"</span>})</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.Rows.Add(<span style="color: blue;">New</span> <span style="color: blue;">Object</span>() {<span style="color: maroon;">"Untereintrag A3"</span>, <span style="color: maroon;">"A"</span>})</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.Rows.Add(<span style="color: blue;">New</span> <span style="color: blue;">Object</span>() {<span style="color: maroon;">"Untereintrag B1"</span>, <span style="color: maroon;">"B"</span>})</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewDT.Rows.Add(<span style="color: blue;">New</span> <span style="color: blue;">Object</span>() {<span style="color: maroon;">"Untereintrag B2"</span>, <span style="color: maroon;">"B"</span>})</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' </span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDS.Tables.Add(aNewDT)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">'</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Me</span>.ComboBox1.DisplayMember = <span style="color: maroon;">"Eintrag"</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Me</span>.ComboBox1.ValueMember = <span style="color: maroon;">"Kategorie"</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Me</span>.ComboBox1.DataSource = aDS.Tables(<span style="color: maroon;">"CB1"</span>)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">'</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDV.Table = aDS.Tables(<span style="color: maroon;">"CB2"</span>)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Me</span>.ComboBox2.DisplayMember = <span style="color: maroon;">"Eintrag"</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Me</span>.ComboBox2.ValueMember = <span style="color: maroon;">"Kategorie"</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Me</span>.ComboBox2.DataSource = aDV</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">End</span> <span style="color: blue;">Sub</span></p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">Private</span> <span style="color: blue;">Sub</span> ComboBox1_SelectedIndexChanged(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span> System.Object, <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> System.EventArgs) <span style="color: blue;">Handles</span> ComboBox1.SelectedIndexChanged</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDV.RowFilter = <span style="color: blue;">String</span>.Format(<span style="color: maroon;">"Kategorie='{0}'"</span>, ComboBox1.GetItemText(ComboBox1.SelectedValue))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ToolStripStatusLabel1.Text = aDV.RowFilter</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">End</span> <span style="color: blue;">Sub</span></p><p style="margin: 0px;"><span style="color: blue;">End</span> <span style="color: blue;">Class</span></p></div&gt

        Comment


        • #5
          Hallo Andreas,

          aufgrund meiner unzureichenden Kenntnisse in VB.NET habe ich mit der von dir aufgezeigten Prozedur nicht viel anfangen können. Ich habe jetzt jedoch mein Problem folgendermaßen in den Griff bekommen:
          Nach einem Doppelklick auf die ComboBox1 wird automatisch eine Prozedur erstellt, die eintritt, wenn der Inhalt dieser ComboBox1 vom User geändert wird. Der ensprechende Code-Schnipsel (nachfolgend aufgeführt) fragt dann lediglich in einer Select Case Anweisung nach, was denn der derzeitige Inhalt der ComboBox1 ist, löscht den aufgelisteten Inhalt von ComboBox2 und passt den Inhalt der ComboBox2 dann entsprechend an.

          Private Sub
          COMBOX1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles COMBOX1.SelectedIndexChanged

          COMBOX2.Items.Clear()

          Select Case COMBOX1.Text

          Case "Obst"
          COMBOX1.Items.Insert(0, "Apfel")

          Case "Gemüse"
          COMBOX1.Items.Insert(0, "Tomate")

          End Select
          End Sub

          Falls hier an diesem Code noch Dinge fehlen (funktionierten tut es eigentlich) die evtl. noch eingefügt werden müssen um austretenden Fehlern vorzubeugen bin ich für Hinweise dankbar.

          Gruß Te

          Comment

          Working...
          X