2012-02-08 71 views
1

私はC#で次のSQLコードを移入私のWinFormsアプリケーションのリストボックスを持っています数値のclientID。リストボックス選択した値の問題

しかし、後のコードで -

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)を返しているはずです。

アイデア?

+0

おそらくあなたが指定した行で、 'SelectedValue'プロパティはnullを返します。 – VS1

答えて

0

を役に立てば幸いint型にキャストする前に選択されていることを確認したClientID:

int intClient = 0; 
     try 
     { 
      intClient = (int)lbxClient.SelectedValue; 
     } 
     catch (Exception) 
     { 
      intClient = 0; 
     } 

私のように感じるのはちょっとしたパッジですが、機能します!

1

lbxClient.SelectedValueは文字列です。次のようにintに変換する必要があります。

int intNewJobClient = Convert.ToInt32(lbxClient.SelectedValue); 

希望します。

+0

これはうまくいきません – PJW

+0

キャストする前にSelectedValueがnullでないことを確認してください、何も選択されていない場合は – Msonic

+0

'SelectedValue'はオブジェクトであり、文字列ではありません。さもなければ、はい、「ClientID」が本当に整数でない限り、これはうまくいくはずです。 – LarsTech

2

あなたのコードはうまくいくはずです。 は、あなたがに結合されているデータが正しいことを確認します - 特に も値が

それは私がこれをしなければならなかった最後に

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

私は同じ問題を抱えていたが、そのちょうど最後の中で、最初の行"DataSource="を置く

lbxClient.DisplayMember = "ClientName"; 
lbxClient.ValueMember = "ClientID"; 
lbxClient.DataSource = cS.cTableResults; 

でこの

lbxClient.DataSource = cS.cTableResults; 
lbxClient.DisplayMember = "ClientName"; 
lbxClient.ValueMember = "ClientID"; 

を交換し、この

を行うことによって、現在解決あなたはそれを取り除くでしょう:)

これは@セバスチャンの答えで説明されている理由です。

関連する問題