programmer1010101 Ответов: 2

Как связать данные JSON с полем со списком


Я очень новичок в visual studio. Я пишу программу, которая будет извлекать подпись сотрудника из API, когда его имя вводится и нажимается кнопка "Получить пользователя" (например, если введено имя сотрудника Jane Doe, подпись "JDOE" будет извлечена из строки API, когда имя вводится и нажимается кнопка).

Мне удалось успешно прочитать данные, однако я хотел бы включить поле со списком, чтобы оно предлагало имена при вводе пользователем (аналогично google).

Я попытался подключить данные JSON к полю со списком, используя режим привязки данных задачи поля со списком, однако, хотя он и извлекает подпись, поле со списком не предлагает имен. Пожалуйста, смотрите ниже мой код, который я написал до сих пор.

Заранее большое вам спасибо.

Что я уже пробовал:

Код для определения переменных:

namespace TimeSheet_Try11_Models
{

        
        public class Employeename
        {
            public string signature { get; set; }
            public string firstName { get; set; }
            public string fullName { get; set; }
            public string lastName { get; set; }
        }

        public class Root
        {
            public List<Employeename> Employeename { get; set; }
       
        }
    
    

    }


Мой код для вызова JSON

namespace TimeSheets_Try_11.Controllers
{
    class WebAPI
    {
       

        public string Getsignature(string name)
        {

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            var cookies = FullWebBrowserCookie.GetCookieInternal(new Uri(StaticStrings.UrlIora), false);
            WebClient wc = new WebClient();
            wc.Encoding = System.Text.Encoding.UTF8;
            wc.Headers.Add("Cookie:" + cookies);
            wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
            wc.UseDefaultCredentials = true;
            string uri = "";

            uri = StaticStrings.UrlIora + name;

            var response = wc.DownloadString(uri);

            var status = JsonConvert.DeserializeObject<List<Employeename>>(response);

            string signame = status.Select(js => js.signature).First();
            return signame;

        }
}


Мой код для моей формы windows

namespace TimeSheets_Try_11

{
    public partial class Form1 : Form
    {
        WebAPI WA = new WebAPI();
      

        public Form1()
        {
            InitializeComponent();
            webBrowser1.Url = new Uri(StaticStrings.UrlIora);
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {



            comboBox1.DataSource = WA.Getsignature(textBox2.Text);
            comboBox1.DisplayMember = "signature";
            comboBox1.ValueMember = "firstName";

        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
        }

        private void button1_Click(AutoCompleteStringCollection combData)
        {
            
            
        }

        /*private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }*/

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form2 p = new Form2();
            p.ShowDialog(); 
        }
    }
}


Строка API-это:

[{"signature":"JDOE","firstName":"Jane","fullName":"Doe, Jane","lastName":"Doe"}]

BillWoodruff

Существует ли риск безопасности, связанный с предоставлением "подсказок" ?

2 Ответов

Рейтинг:
0

Sandeep Mewara

Вам необходимо установить следующие свойства для ComboBox autosuggest:
AutoCompleteMode Enum (System.Окна.Формы) | Microsoft Docs[^]
AutoCompleteSource Enum (System.Окна.Формы) | Microsoft Docs[^]

Смотрите здесь для получения более подробной информации:
комбинированный список.Свойство AutoCompleteSource (System.Окна.Формы) | Microsoft Docs[^]

Цитата:
Используйте свойства AutoCompleteCustomSource, AutoCompleteMode и AutoCompleteSource для создания выпадающего списка, который автоматически завершает входные строки, сравнивая введенный префикс с префиксами всех строк в поддерживаемом источнике. Это полезно для элементов управления ComboBox, в которых часто вводятся URL-адреса, адреса, имена файлов или команды.

Использование имущества AutoCompleteCustomSource не является обязательным, но вы должны установить свойство AutoCompleteSource в CustomSource для того, чтобы использовать AutoCompleteCustomSource.

Вы должны использовать свойства AutoCompleteMode и AutoCompleteSource вместе.


Рейтинг:
0

BillWoodruff

"Я хотел бы включить поле со списком, чтобы оно предлагало имена по мере ввода пользователем (аналогично google)."

Это означает, что вы должны предварительно загрузить все возможные пользовательские строки JSON с сервера: imho, это небезопасно !