【问题标题】:How can my combobox display a list of names, but use a unique ID associated with that name when the name is selected?我的组合框如何显示名称列表,但在选择名称时使用与该名称关联的唯一 ID?
【发布时间】:2019-08-31 10:34:14
【问题描述】:

我的应用程序使用一个组合框,其中填充了从 API 返回的列表名称。 API 还返回与每个名称关联的 ID。如何让组合框显示名称,但是当用户选择名称时,与该名称关联的 ID 存储在变量中,或用于执行某些操作?我可以让组合框填充名称,但名称没有任何实际用途,仅用于显示目的。我不知道如何让组合框显示名称,但使用 ID 作为其值。

这是API返回的json。

[
{
    "BookId": "13a7dc2b-80da-4407-bd4d-806d7f4adc3b",
    "BookName": "Reckon API",
    "Bookstatus": 3,
    "Country": "AU"
},
{
    "BookId": "32c03594-1ecb-4f97-8453-5b28a03d26d9",
    "BookName": "Payroll Book",
    "Bookstatus": 3,
    "Country": "AU"
},
{
    "BookId": "51d16696-b98a-4b3b-ac67-f36559cff70b",
    "BookName": "Accounting Book",
    "Bookstatus": 3,
    "Country": "AU"
}
]

这是我用来填充组合框的代码:

using (HttpClient httpClient = new HttpClient())
        {
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
            var response = httpClient.GetAsync("https://api.reckon.com/R1/cashbooks").Result;
            string responseText = response.Content.ReadAsStringAsync().Result;
            JArray parsedArray = JArray.Parse(responseText);
            foreach (JObject parsedObject in parsedArray.Children<JObject>())
            {
                foreach (var parsedProperty in parsedObject.Properties())
                {
                    if (parsedProperty.Name == "BookName")
                    {
                        comboBox2.Items.Add(parsedProperty.Value);
                    }
                }
            }
        }

我有一个 MYSQL 数据库,我存储了我的名称和 ID 列表,我认为我可以使用数据库作为数据源,显示成员作为名称,值成员作为 id,但是当我运行应用程序时组合框没有填充,但我不知道为什么。我如何完成这项任务对我来说并不重要,我只需要找到一种方法。

编辑:

我发现这篇我认为可能会有所帮助的帖子。:How to set mySQL data source for combo box (C#)

并将此代码添加到我的应用程序中:

using (MySqlConnection mySqlConnection = new MySqlConnection())
        {
            mySqlConnection.ConnectionString = "server=localhost;userid=root;password=;database=reckon api sample app dev;SslMode=none";
            mySqlConnection.Open();
            string sqlQuery = "SELECT BookId, BookName FROM cashbooks";
            MySqlDataAdapter mySqlDataAdapter = new MySqlDataAdapter(sqlQuery, mySqlConnection);
            DataSet dataSet = new DataSet();
            mySqlDataAdapter.Fill(dataSet);
            comboBox2.DataSource = dataSet.Tables[0];
            comboBox2.DisplayMember = "BookName";
            comboBox2.ValueMember = "BookId";
        }

我的组合框现在填充了很棒的名字。当我从组合框中选择一个名称时,如何告诉我的应用程序获取与该名称关联的 id 并使用它来做某事?例如,我想将 ID 保存到一个变量中,以便在以后的 API 调用中使用它。

谢谢。

【问题讨论】:

  • 推荐的方法是创建一个类并给它一个 ToString 覆盖。现在您可以填写实例;它们看起来像字符串,但会像你想要的一样聪明..

标签: c# mysql json combobox


【解决方案1】:

随便用

comboBox2.SelectedValue

编辑: 对于您的 API,您可以像这样编辑代码:

    using (HttpClient httpClient = new HttpClient())
    {
        httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
        var response = httpClient.GetAsync("https://api.reckon.com/R1/cashbooks").Result;
        string responseText = response.Content.ReadAsStringAsync().Result;`enter code here`
        JArray parsedArray = JArray.Parse(responseText);
        DataTable dtSource = new DataTable();
dtSource.Columns.AddRange(new DataColumn[]{new DataColumn("BookID"),new DataColumn("BookName")});

        foreach (JObject parsedObject in parsedArray.Children<JObject>())
        {
string BookID,BookName;

            foreach (var parsedProperty in parsedObject.Properties())
            {
if (parsedProperty.Name == "BookId")
                {
BookID= parsedProperty.Value;
                }
else if (parsedProperty.Name == "BookName")
                {
BookName= parsedProperty.Value;

                }
            }
dtSource.Rows.Add(BookID,BookName);
        }
    }
comboBox2.DataSource = dtSource;

comboBox2.DisplayMember = "BookName";

comboBox2.ValueMember = "BookID";

【讨论】:

    【解决方案2】:

    你可以试试这个:

    int selectedId;
    bool res = int.TryParse(comboBox.SelectedValue.ToString(), out selectedId);
    
    if(res)
    // do something here
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-01
      • 2022-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      相关资源
      最近更新 更多