【发布时间】:2012-03-01 02:53:49
【问题描述】:
我的 WinForms 应用程序中有一个列表框,其中填充了以下 C# 中的 SQL 代码:
private void PopulateClients()
{
string sqlText = "SELECT ClientID, ClientName FROM tblClients;";
cSqlQuery cS = new cSqlQuery(sqlText, "table");
lbxClient.DataSource = cS.cTableResults;
lbxClient.DisplayMember = "ClientName";
lbxClient.ValueMember = "ClientID";
}
因此,当列表框显示客户端名称时,它应在选择时返回的值是数字客户端 ID。
不过,在后面的代码中——
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;
使用无效的演员表。据我所见,列表框仍在返回客户端名称,而它应该返回数字客户端 ID (int)。
有什么想法吗?
【问题讨论】:
-
可能在你指出的那一行,
SelectedValue属性返回 null 不能转换为 int..
标签: c# .net sql winforms listbox