C#如何根据用户使用数据绑定选择的内容随机生成字符串

时间:2018-06-06 03:37:29

标签: c# dictionary data-binding combobox

我在C#工作,并且我已经满足了这些标准:

使用以下功能实现GUI(Windows Form Application)占星应用程序:

提示:在运行时使用集合绑定数据。

显示所有标志的组合框

使用所选符号

更新图像控件

包含所选符号的所有预测的列表框

用户界面为给定的符号添加预测并刷新列表

我能够让组合框填充我选择这样做的标志:

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 :(得分:0)

您使用了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);
    }
}