2017-06-28 1 views
0

2つのコンボボックスを持つWPFフォームを作成しました。両方とも、このNested Hashtableからのクエリで埋められています。スイッチ内でネストされたハッシュテーブルをフィルタリングするときのトラブル

cboAgenciesは、スクリプトが実行され、フォームが読み込まれるときに塗りつぶします。 cboAgenciesで行われた選択に基づいてcboOfficesを選択し、選択した代理店に固有のオフィス所在地をリストします。

または、そうなっています。

$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 
     } 
    } 
}) 

注:

はここに関連するコードのコードは匿名化されています。ハッシュテーブルの実部または細分名にはスペースがありません。ちょうどそれが心配のポイントである場合。私は様々な変数を照会し、以下の変数がすべて正しくしていることがわかり. .\script.ps1を使用してこのコードを実行する

  • $cboAgencies.SelectedItem(および$Script:cboAgencies.SelectedItem
  • $selectedAgency(および$Script:selectedAgency
  • $selectedAdmin(および$Script:selectedAdmin

しかし$ arr_Offices問題は、このラインで起こっていることを意味し、空である:

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

私はSwitch関数の外にこれを配置することによって、これをさらに確認しました:

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

$arr_Offices$cboOfficesはうまくいっています。

私はここで何が間違っていますか?

+0

[OK]を修正したと思います。私は私がそれを試してみたと思った.Keys、なぜ私は持っていない。大きいコードサンプルのキーが、明らかに私はなかった。でも、私はちょっと混乱しています。 cboAgenciesの配列は '$ hash_AgencyOffices ['division1'、 'division2']。Keys'を使って塗りつぶさなければなりません。スイッチ機能の中にキーが必要なのはなぜですか? – music2myear

+0

Ah。それは理にかなっている。さて、.keysビットは私が必要とした解決策でした。私はそれを書き留めて、それを受け入れるつもりです。 – music2myear

+0

クール;私はそれを答えにコピーしようとしました。 – TessellatingHeckler

答えて

2

リンクされた質問から、$script:hash_AgencyOffices[$Script:selectedAdmin][$Script:se‌​lectedAgency]は文字列の配列になりますが、.Keysプロパティはありません。

データ構造は ""キーを持つルートハッシュテーブルで、その値はキーを持つハッシュテーブルで、その値は直接内容が "の配列です。

AgencyOffices['division2'].KeysAgencyOffices['division2']['subdivision1']を使用できますが、AgencyOffices['division2']['subdivision1'].Keysでは使用できません。

関連する問題