2017-01-08 75 views
0

我有2個組合框。 txtlocationtxtstepc#中基於其他值的組合框過濾器

我說的這些txtlocation項目statically.The項目有:TO QC TP MAT SUP DCC FIN REC SIG

而且txtstep項目有:

TO As SUP 
TO As PIP 
TO HW 
TO MOD 
TO FSQ 
QC HW 
QC LC 
QC RE 
QC TEST 
QC PAD 
QC WJCS 
TP 
MAT NIS 
MAT DATA 
SUP ASBUILT 
SUP REPORT 
SUP REPORT/ASBUILT 
DCC MONO LC 
DCC MONO RE 
FIN LC 
FIN PAD 
FIN TEST 
FIN DRY 
FIN FL 
FIN RE 
REC FIN LC 
REC FIN PAD 
REC FIN TEST 
REC FIN DRY 
REC FIN FL 
REC FIN RE 
SIG LC 
SIG PAD 
SIG TEST 
SIG DRY 
SIG FL 
SIG RE 

我對txtlocation添加一個事件(selectedindexchang)。如果用戶選擇TO 應該過濾TO的步驟。 TO As SUP TO As PIP TO HW TO MOD TO FSQ

我應該使用數據源嗎?

private void txtlocation_SelectedIndexChanged(object sender, EventArgs e) 
     { 
     } 
+0

您可以使用'DataSet'。或者您可以簡單地創建名稱數組並過濾它們。 – Prajwal

+0

@Prajwal可以直接過濾組合框的項目列表嗎? –

+0

是的。或者,您可以在設置其他組合框值後添加項目。 – Prajwal

回答

1

不同的數據源會更清楚可能的方式,你可以使用Dictionary<TLocation, List<TStep>>與記者的數據源連接選擇的值。

private Dictionary<string, List<string>> _data = new Dictionary<string, List<string>> 
{ 
    { "TO", new List<string> { "TO AS SUP", "TO AS PIP" }}, 
    { "DCC", new List<string> { "DCC MONO LC", "DCC MONO RE" }}, 
    { "MAT", new List<string> { "MAT NIS", "MAT DATA" }}, 
}; 

comboBoxLocation.DataSource = data.Keys.ToList(); 

使用SelectedValueChanged事件處理程序設置正確的數據源烯類上的位置選擇。

private void comboBoxlocation_SelectedValueChanged(object sender, EventArgs e) 
{ 
    var comboBoxLocations = (ComboBox)sender; 
    comboBoxSteps.DataSource = _data[comboBoxLocations.SelectedValue.ToString()]; 
} 

如果您只有一個步驟列表,您可以過濾列表並將過濾結果設置爲DataSource。

private void comboBoxlocation_SelectedValueChanged(object sender, EventArgs e) 
{ 
    var comboBoxLocations = (ComboBox)sender; 
    var selectedLocation = comboBoxLocations.SelectedValue.ToString(); 
    comboBoxSteps.DataSource = _AllSteps.Where(step => step.StartsWith(selectedLocation)) 
             .ToList(); 
} 

使用這種方法,您每次在位置組合框中進行更改時都會循環列表。