0

我的应用程序使用一个组合框,其中填充了从 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,但是当我运行应用程序时,组合框没有t 填充,但我不知道为什么。我如何完成这项任务对我来说并不重要,我只需要找到一种方法。

编辑:

我发现这篇我认为可能会有所帮助的帖子。:如何为组合框设置 mySQL 数据源(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 调用中使用它。

谢谢。

4

2 回答 2

0

你可以试试这个:

int selectedId;
bool res = int.TryParse(comboBox.SelectedValue.ToString(), out selectedId);

if(res)
// do something here
于 2019-04-10T04:57:28.207 回答
-2

只需使用

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";
于 2019-04-10T04:52:24.867 回答