使用API​​中的数据填充组合框

问题描述

该程序的目的是在输入名称后从API URL中检索员工用户ID(或签名)。

现在我的程序没有显示任何错误,但是当我按开始键时,我的组合框(标记为“名称”)没有按预期显示任何建议。我希望它在用户输入名称时建议名称(类似于google的工作方式)。

我尝试过ComboBox.displayMember,ComboBox.ValueMember,and ComboBox.DataSource,但是,我的数据源是从API JSON提取的。

谢谢您的帮助。

这是我的JSON字符串:

[{
        "signature": "JANDOW","firstName": "Jane","fullName": "Dow,Jane","lastName": "Dow"
    }
]

我的表单代码

    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)
            {
   
    
                string sgname; string projectstring;
                projectstring = comboBox1.Text.ToString();
                sgname = WA.Getsignature(projectstring);
                textBox2.Text = sgname;
    
    
            }
    
            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 comboBox1_SelectedindexChanged(object sender,EventArgs e)
            {
                
            }
        }

}

用于调用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;
        }
    }
}

用于定义变量的代码为:

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

    }

Windows Forms design

解决方法

首先,JSON是一个数组。您需要更改方法以适应该要求:

        public List<string> Getsignature(string name)
        {
            ...

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

            return status.Select(emp => emp.signature).ToList();
        }

然后您需要正确绑定ComboBox:

            private void button1_Click(object sender,EventArgs e)
            {    
                comboBox1.DataSource = WA.Getsignature(textBox2.Text);
            }