@DannyJ
One of many ways to do it:
#include <ComboConstants.au3>
#include <GuiComboBox.au3>
#include <File.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $arrComboBoxes[3]
#Region ### START Koda GUI section ### Form=
Global $frmComboBoxes = GUICreate("ComboBoxes", 250, 128, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "ExitApplication")
$arrComboBoxes[0] = GUICtrlCreateCombo("", 20, 19, 209, 25, BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL))
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$arrComboBoxes[1] = GUICtrlCreateCombo("", 20, 51, 209, 25, BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL))
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$arrComboBoxes[2] = GUICtrlCreateCombo("", 20, 83, 209, 25, BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL))
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $strFileName = @ScriptDir & "\ComboBoxes.csv", _
$arrFileContent
_FileReadToArray($strFileName, $arrFileContent, $FRTA_COUNT, ";")
If @error Then
ConsoleWrite("_FileReadToArray ERR: " & @error & @CRLF)
Else
; Fill the first ComboBox with the array elements of the "first level"
For $i = 1 To $arrFileContent[0][0] Step 1
GUICtrlSetData($arrComboBoxes[0], $arrFileContent[$i][0] & ($i < $arrFileContent[$i][0] ? "|" : ""))
Next
; Set the current selection to the first enrty of the ComboBox
_GUICtrlComboBox_SetCurSel($arrComboBoxes[0], 0)
EndIf
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $arrComboBoxes[0]
FillCombo($arrComboBoxes[0], 0)
Case $arrComboBoxes[1]
FillCombo($arrComboBoxes[1], 1)
EndSwitch
WEnd
Func FillCombo($idCombo, $intComboBoxLevel)
Local $strComboData = "", _
$arrIndexes, _
$arrEntries[0]
$strComboData = GUICtrlRead($idCombo)
$arrIndexes = _ArrayFindAll($arrFileContent, $strComboData, 0, 0, 0, 0, $intComboBoxLevel)
If IsArray($arrIndexes) Then
; Blank all the other ComboBoxes which are on the next level(s)
For $i = UBound($arrComboBoxes) - 1 To $intComboBoxLevel + 1 Step -1
GUICtrlSetData($arrComboBoxes[$i], "")
Next
; Find all occurences of the ComboBox item selected
For $i = 0 To UBound($arrIndexes) - 1 Step 1
_ArrayAdd($arrEntries, $arrFileContent[$arrIndexes[$i]][$intComboBoxLevel + 1])
Next
; Make all entries found unique
$arrEntries = _ArrayUnique($arrEntries, 0, 0, 0, $ARRAYUNIQUE_NOCOUNT)
; Fill the ComboBox
For $i = 0 To UBound($arrEntries) - 1 Step 1
GUICtrlSetData($arrComboBoxes[$intComboBoxLevel + 1], $arrEntries[$i] & "|")
Next
_GUICtrlComboBox_SetCurSel($arrComboBoxes[$intComboBoxLevel + 1], 0)
EndIf
EndFunc
Func ExitApplication()
Exit
EndFunc