C# 列表框选定值问题
我的WinForms应用程序上有一个列表框,其中填充了以下C#中的SQL代码: 因此,当列表框显示客户端名称时,选中时它应该返回的值是数字clientID 但是,在代码的后面-C# 列表框选定值问题,c#,.net,sql,winforms,listbox,C#,.net,Sql,Winforms,Listbox,我的WinForms应用程序上有一个列表框,其中填充了以下C#中的SQL代码: 因此,当列表框显示客户端名称时,选中时它应该返回的值是数字clientID 但是,在代码的后面- private void btnAddNewJob_Click(object sender, EventArgs e) { try { string strNewJobName = txtNewJobName.Text; strin
private void btnAddNewJob_Click(object sender, EventArgs e)
{
try
{
string strNewJobName = txtNewJobName.Text;
string strNewJobRef = txtNewJobRef.Text;
int intNewJobClient = (int)lbxClient.SelectedValue;
string sqlText = "INSERT INTO tblJobs (JobID, JobClient, JobRef, JobName) " +
"VALUES (@JobID, @JobClient, @JobRef, @JobName);";
SqlCommand sqlCom = new SqlCommand(sqlText);
sqlCom.Parameters.Add("@JobID", SqlDbType.Int);
sqlCom.Parameters.Add("@JobClient", SqlDbType.Int);
sqlCom.Parameters.Add("@JobRef", SqlDbType.Text);
sqlCom.Parameters.Add("@JobName", SqlDbType.Text);
cConnectionString cS = new cConnectionString();
sqlCom.Parameters["@JobID"].Value = cS.NextID("JobID", "tblJobs");
sqlCom.Parameters["@JobClient"].Value = intNewJobClient;
sqlCom.Parameters["@JobRef"].Value = strNewJobRef;
sqlCom.Parameters["@JobName"].Value = strNewJobName;
cSqlQuery cQ = new cSqlQuery(sqlCom, "non query");
PopulateJobs();
txtNewJobName.Text = "";
txtNewJobRef.Text = "";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
在第三行失败
int intNewJobClient = (int)lbxClient.SelectedValue;
用无效的演员阵容。就我所见,listbox仍然返回客户机名称,而它应该返回数字clientID(int)
有什么想法吗?lbxClient.SelectedValue是一个字符串。应将其转换为int,如下所示:
int intNewJobClient = Convert.ToInt32(lbxClient.SelectedValue);
希望这能有所帮助。您的代码应该可以工作-刚刚测试过。 确保绑定到的数据是正确的,尤其是ClientID 另外,请确保在强制转换为int之前选择了该值
希望能有所帮助最后我不得不这样做:
int intClient = 0;
try
{
intClient = (int)lbxClient.SelectedValue;
}
catch (Exception)
{
intClient = 0;
}
我觉得这有点像是胡说八道,但它确实管用 您的代码应该可以工作,但是您应该对索引上的SelectedValue进行健全性检查
if (lbxClient.SelectedIndex != -1)
{
int intClient = 0;
try
{
intClient = Convert.ToInt32(lbxClient.SelectedValue);
}
catch (Exception)
{
// catch if the value isn't integer.
intClient = -1;
}
}
我也有同样的问题,但现在这样做就解决了 替换这个
lbxClient.DataSource = cS.cTableResults;
lbxClient.DisplayMember = "ClientName";
lbxClient.ValueMember = "ClientID";
与
只需将第一行“DataSource=“
放在最后一行,您就可以摆脱它:)
原因在@Sebastian answer中解释。如果未选择任何内容,则在强制转换之前,您应该确保SelectedValue不为空。
SelectedValue
是一个对象,而不是字符串。否则,可以,除非“ClientID”不是真正的整数。可能在您指示的行中,SelectedValue
属性返回null,不能转换为int。。
lbxClient.DataSource = cS.cTableResults;
lbxClient.DisplayMember = "ClientName";
lbxClient.ValueMember = "ClientID";
lbxClient.DisplayMember = "ClientName";
lbxClient.ValueMember = "ClientID";
lbxClient.DataSource = cS.cTableResults;