2017-08-26 9 views
1

selectedIndexChanged EventのデータをComboBoxに基づいてデータベースからロードしたいとします。私は2 controls,cbDocNametbDocFeeを持っています。私がcbDocNameからDocを選択すると、そのDoc料金はtbDocFeeに読み込まれます。以下は、上記のコードが完全に動作代わりcbDocNameにDOCNAMEを示すから、それはDisplayMemberとしてたDocIDを示すコードとComboBoxに基づいてデータベースからテキストボックスにデータをフェッチする方法選択された変更イベント

enter image description here

private void cbDocsName_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     GetDocFees(); 
    } 
    public void GetDocFees() 
    { 
     string CS = ConfigurationManager.ConnectionStrings["MyCon"].ConnectionString; 
     using (SqlConnection con = new SqlConnection(CS)) 
     { 
      SqlCommand cmd = new SqlCommand("SELECT DocFees FROM AddDoctor WHERE [email protected]", con); 
      cmd.CommandType = CommandType.Text; 
      cmd.Parameters.AddWithValue("@ID", cbDocsName.Text); 
      con.Open(); 
      tbDocFees.Text = cmd.ExecuteScalar().ToString(); 

     } 
    } 

添付の写真です。ここでform load event

private void frmDocAppoinment_Load(object sender, EventArgs e) 
    { 
     cbDocsName.DataSource = DocAppoinmentSystem.Utillities.clsNewApp.LoadDocNameComboBox(); 
     cbDocsName.DisplayMember = "DocName"; 
     cbDocsName.ValueMember = "ID"; 
    } 

上のコードが更新されます。LoadDocNameComboBox()のコードが

public static DataTable LoadDocNameComboBox() 
    { 
     DataTable dtCampus = new DataTable(); 
     string CS = ConfigurationManager.ConnectionStrings["MyCon"].ConnectionString; 
     using (SqlConnection con = new SqlConnection(CS)) 
     { 
      using (SqlCommand cmd = new SqlCommand("SELECT ID,DocName FROM AddDoctor WHERE DocStatus='PRESENT'", con)) 
      { 
       cmd.CommandType = CommandType.Text; 
       con.Open(); 
       SqlDataReader r = cmd.ExecuteReader(); 
       dtCampus.Load(r); 
      } 
     } 
     return dtCampus; 
    } 

を下回っている。注:これらのすべての時にcbDocName.SelectedIndex, cbDocName.SelectedText, cbDocName.SelectedItemが、私はエラー

オブジェクト参照が設定されていない取得オブジェクトのインスタンスへ

+1

「LoadDocNameComboBox」が返すものを正確に知ることができます。 – DonBoitnott

+0

'LoadDocNameComboBox'が何をするかを表示します。 – Codexer

+0

{LoadDocNameComboBox}はDocNameとDocIDをデータベースから返し、ComboBoxを埋めます –

答えて

1

あなたが使用する必要があります。

cmd.Parameters.AddWithValue("@ID", cbDocsName.SelectedValue); 

あなたがたValueMemberとしてDisplayMemberとIDとしてDOCNAMEを設定しているあなたのコンボボックスをロードします。したがって、SelectedではSelectedTextが名前になり、SelectedValueがIDになります。したがって、データベースから料金データを取得するには、値、この場合はSelectedValueを参照する必要があります。

EDIT

また、あなたは、データソースの前にValueMemberでとDisplayMemberを設定する必要があることに注意してください。したがって、あなたは次のものが必要です:

cbDocsName.DisplayMember = "DocName"; 
cbDocsName.ValueMember = "ID"; 
cbDocsName.DataSource = LoadDocNameComboBox(); 
+0

'cmd.Parameters.AddWithValue(" @ ID "、cbDocsName.SelectedValue);を使用することで、エラー System.Data.dllでSystem.DataExceptionが発生しましたが、ユーザーコードで処理されませんでした。 追加情報:マッピングがありません。オブジェクト型System.Data.DataRowViewから不明な管理プロバイダーのネイティブ型に存在します。 –

+0

このエラーはどの回線で発生しますか? –

+0

'tbDocFees.Text = cmd.ExecuteScalar()。ToString();' {Scalar}を{Reader}に変更しましたが、ヘルプはありません –

0

プリーアあなたのDocAppoinmentSystem.Utillities.clsNewApp.LoadDocNameComboBox() が返ってきていることをオブジェクトリストで確認してください。私はあなたがDisplayMemberに使用しているプロパティが別の名前を持っていることを確信しています。 "DocName"プロパティを確認してください。簡単なスペルミスかもしれません。

+0

スペルミスはありません –

関連する問題