вы использовали DataTable
в вопросе, я использую Dictionary
здесь в ответе.Вы также можете использовать DataTable
, тогда вы должны сделать столбцы и отношения соответственно.Основной мотив этого ответа - показать вам, как вы можете динамически изменять записи listbox
при выборе combobox
здесь у нас есть класс, который содержит данные, связанные с гороскопом: HoroscopeData
public class HoroscopeData
{
public string sign;
public List<string> prediction;
public HoroscopeData(string sign)
{
this.sign = sign;
this.prediction = GetPredictionForSign(sign);
}
private List<string> GetPredictionForSign(string sign)
{
List<string> predition = new List<string>();
for (int i = 0; i < 3; i++)
predition.Add("Prediction of " + sign + " " + i.ToString());
return predition;
}
}
и наша структура данных
public Dictionary<int, HoroscopeData> Horoscope = new Dictionary<int, HoroscopeData>();
, поэтому наш код будет выглядеть так:
public partial class Form1 : Form
{
public Dictionary<int, HoroscopeData> Horoscope = new Dictionary<int, HoroscopeData>();
public Form1()
{
InitializeComponent();
Horoscope.Add(1, new HoroscopeData("Aris"));
Horoscope.Add(2, new HoroscopeData("Libra"));
Horoscope.Add(3, new HoroscopeData("Leo"));
//adding items in combobox, with tag which is associated with our main data
// so we can easily fetch prediction out of it whenever selection changes
foreach(int tag in Horoscope.Keys)
{
CmbItem item = new CmbItem(Horoscope[tag].sign, tag);
comboBox1.Items.Add(item);
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
//here on combobox selection, we are fetching predictions of selected sign
// and add them in listbox
CmbItem selectedItem = (CmbItem)(((ComboBox)sender).SelectedItem);
List<string> predictions = Horoscope[selectedItem.tag].prediction;
listBox1.Items.Clear();
foreach (string pre in predictions)
listBox1.Items.Add(pre);
}
}