【问题标题】:C# How to randomly generate string depending on what user has chosen using databindingC#如何根据用户使用数据绑定选择的内容随机生成字符串
【发布时间】:2023-03-28 12:39:01
【问题描述】:

我正在使用 C# 工作,并且我已获得满足以下条件:

 实现具有以下功能的 GUI(Windows 窗体应用程序)星座应用程序:

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

 一个显示所有标志的组合框

 使用所选符号更新的图像控件

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

 为给定标志添加预测并刷新列表的 UI

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

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 个不同的读数给每个标志,然后根据用户在组合框中选择一个标志,显示三个读数之一?

【问题讨论】:

  • 提示:在运行时使用集合绑定数据这就是您的答案。首先,您需要为此任务定义数据结构,例如。标志、读数等将是实体。您可以映射它们以根据用户选择显示您的数据。
  • 必须使用DataTable吗?或者你可以用其他数据结构来做?

标签: c# dictionary data-binding combobox


【解决方案1】:

您在问题中使用了DataTable,我在这里使用Dictionary 作为答案。 您也可以使用DataTable,然后您需要相应地制作列和关系。 此答案的主要目的是向您展示如何在选择 combobox 时动态更改 listbox 的条目

这里我们有一个包含星座相关数据的类: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&lt;int, HoroscopeData&gt; Horoscope = new Dictionary&lt;int, HoroscopeData&gt;();

所以我们的代码看起来像,

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);
    }
}

【讨论】:

    猜你喜欢
    • 2022-11-23
    • 2013-01-02
    • 2020-10-13
    • 2014-06-18
    • 2015-06-29
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    相关资源
    最近更新 更多