Как мой комбинированный список может отображать список имен, но использовать уникальный идентификатор, связанный с этим именем, когда имя выбрано? - PullRequest
0 голосов
/ 10 апреля 2019

Мое приложение использует комбинированный список, который заполнен списком имен, возвращаемых из API.API также возвращает идентификатор, связанный с каждым именем.Как можно, чтобы в выпадающем списке отображалось имя, но когда пользователь выбирает имя, идентификатор, связанный с этим именем, сохраняется в переменной или используется для выполнения каких-либо действий?Я могу заставить поле со списком заполняться именами, но имена не имеют никакого реального использования, только для демонстрации.Я не знаю, как заставить выпадающий список отображать имя, но используйте идентификатор в качестве его значения.

Вот json, возвращенный API.

[
{
    "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, в которой я храню свой список имен и идентификаторов, думая, что я могу использовать эти данные в качестве источника данных, дисплеяmember как имя и значение member как id, но когда я запускаю приложение, поле со списком не заполняется, но я понятия не имею, почему.Мне действительно не важно, как я выполняю эту задачу, мне просто нужно найти способ.

РЕДАКТИРОВАТЬ:

Я нашел этот пост, который, как я думал, может помочь .: Как установить источник данных 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";
        }

Мой комбинированный список теперь заполняется именами, и это здорово,Когда я выбираю имя в выпадающем списке, как сказать моему приложению получить идентификатор, связанный с этим именем, и использовать его для выполнения каких-либо действий?Например, я хочу сохранить идентификатор в переменной, чтобы использовать его в будущем вызове API.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Вы можете попробовать это:

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

if(res)
// do something here
0 голосов
/ 10 апреля 2019

Просто используйте

comboBox2.SelectedValue
* * 1003 Изменить: Для вашего 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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...