问题描述
该程序的目的是在输入名称后从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)
{
}
}
}
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; }
}
}
解决方法
首先,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);
}