C # Как случайным образом генерировать строку в зависимости от того, что пользователь выбрал, используя привязку данных - PullRequest
0 голосов
/ 06 июня 2018

Я работаю в C #, и мне были даны следующие критерии:

 Реализовать приложение гороскопа с графическим интерфейсом (Windows Form Application) со следующими функциями:

int Подсказка: Использование коллекций для привязки данных во время выполнения.

com Поле со списком, отображающее все знаки

control Элемент управления изображением должен обновляться с выбранным знаком

 Aсписок со всеми прогнозами для выбранного знака

 Интерфейс пользователя для добавления прогноза для данного знака и обновления списка

Мне удалось заставить выпадающий список заполняться знаками IВы выбрали следующее:

private void Form1_Load(object sender, EventArgs e)
{
    DataTable Horoscope = new DataTable();
    DataColumn dc1 = new DataColumn("Sign");
    // DataColumn dc2 = new DataColumn("Reading");

    Horoscope.Columns.Add(dc1);
    // Horoscope.Columns.Add(dc2);

    Horoscope.Rows.Add("Libra");
    Horoscope.Rows.Add("Leo");
    Horoscope.Rows.Add("Virgo");
    Horoscope.Rows.Add("Scorpio");

    cmbHoro.DataSource = Horoscope;
    cmbHoro.DisplayMember = "Sign";
}

Мой вопрос заключается в том, как я могу назначить, скажем, 3 разных значения для каждого знака, а затем в зависимости от того, какой пользователь выберет знак в поле со списком, будет показано одно из трех значений?

1 Ответ

0 голосов
/ 06 июня 2018

вы использовали 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...