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?
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
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
Kühl; Ich habe versucht, es in eine Antwort zu kopieren. – TessellatingHeckler