2017-06-28 2 views
0

Ich habe ein WPF-Formular mit 2 Kombinationsfeldern erstellt, beide gefüllt mit Abfragen von diesem Nested Hashtable.Problem beim Filtern einer verschachtelten Hashtable in einem Switch

cboAgencies wird gefüllt, wenn das Skript ausgeführt wird und das Formular geladen wird. cboOffices basierend auf der in cboAgencies vorgenommenen Auswahl und listet die für die ausgewählte Agentur spezifischen Bürostandorte auf.

Oder soll es.

Hier ist der entsprechende Code:

$cboAgencies.Add_SelectionChanged({ 

    $Script:selectedAgency = $cboAgencies.SelectedItem.ToString() 
    $Script:cboOffices.Items.Clear() 
    $Script:selectedAdmin = $null 

    Switch($Script:selectedAgency) { 
     subdivision1 { 
      $Script:selectedAdmin = 'division2' 
      $Script:arr_Offices = ($Script:hash_AgencyOffices[$Script:selectedAdmin][$Script:selectedAgency].Keys | Sort-Object) 
      $Script:arr_Offices | ForEach-Object { 
       $Script:cboOffices.Items.Add($_) | Out-Null 
      } 
      break 
     } 
     subdivision2 { 
      $Script:selectedAdmin = 'division2' 
      $Script:arr_Offices = ($Script:hash_AgencyOffices[$Script:selectedAdmin][$Script:selectedAgency].Keys | Sort-Object) 
      $Script:arr_Offices | ForEach-Object { 
       $Script:cboOffices.Items.Add($_) | Out-Null 
      } 
      break 
     } 
     division1 { 
      $Script:selectedAdmin = 'division1' 
      $Script:arr_Offices = ($Script:hash_AgencyOffices[$Script:selectedAdmin][$Script:selectedAgency].Keys | Sort-Object) 
      $Script:arr_Offices | ForEach-Object { 
       $Script:cboOffices.Items.Add($_) | Out-Null 
      } 
      break 
     } 
    } 
}) 

Hinweis: Der Code anonymisiert. Es gibt keine Leerzeichen in den tatsächlichen Divisions- oder Unterteilungsnamen in der Hashtabelle. Nur für den Fall, dass das ein Problem ist.

Rennen mit diesem Code . .\script.ps1 ich die verschiedenen Variablen abfragen und feststellen, dass die folgenden Variablen sind alle richtig:

  • $cboAgencies.SelectedItem(und $Script:cboAgencies.SelectedItem)
  • $selectedAgency(und $Script:selectedAgency)
  • $selectedAdmin(und $Script:selectedAdmin)

Aber arr_Offices $ ist leer, was bedeutet, dass das Problem in dieser Zeile passiert:

$Script:arr_Offices = ($Script:hash_AgencyOffices[$Script:selectedAdmin][$Script:selectedAgency].Keys | Sort-Object) 

ich weiter diese dies, indem außerhalb der Switch Funktion bestätigt haben:

$Script:arr_Offices = ($Script:hash_AgencyOffices['division2']['subdivision1'] | Sort-Object) 
$Script:arr_Offices | ForEach-Object { 
    $Script:cboOffices.Items.Add($_) | Out-Null 
} 

Und $arr_Offices und $cboOffices füllen einfach gut.

Was habe ich hier falsch gemacht?

+0

Ok, ich denke, das ist behoben. Ich dachte, ich hätte es sans versucht. Keys, weshalb habe ich nicht. Keys in der größeren Codebeispiel, aber anscheinend hatte ich nicht. Aber ich bin auch ein bisschen verwirrt. Das Array, das cboAgencies ausfüllt, muss mit '$ hash_AgencyOffices ['division1', 'division2'] gefüllt werden. Keys' sonst wird nur zweimal (Collection) aufgelistet. Warum sind .Keys dort notwendig und nicht innerhalb der Switch-Funktion? – music2myear

+0

Ah. Das macht Sinn. Nun, das .key-Bit war die Lösung, die ich brauchte. Fühlen Sie sich frei, dies zu schreiben, und ich werde es akzeptieren. – music2myear

+0

Kühl; Ich habe versucht, es in eine Antwort zu kopieren. – TessellatingHeckler

Antwort

2

Von Ihrer verknüpften Frage, $script:hash_AgencyOffices[$Script:selectedAdmin][$Script:se‌​lectedAgency] resultiert in einem Array von Strings, es wird keine .Keys Eigenschaft haben.

Ihre Datenstruktur ist "Wurzelhashtable, die Schlüssel hat, ihre Werte sind Hashtables, die Schlüssel haben, ihre Werte sind Arrays, die direkt Inhalt haben".

So können Sie AgencyOffices['division2'].Keys und AgencyOffices['division2']['subdivision1'] verwenden, aber nicht AgencyOffices['division2']['subdivision1'].Keys.

Verwandte Themen