2011-12-15 16 views
1

私はC#、winformsを使用しています。comboboxから選択した値を取得

小さな問題がありました。私が使用しているコードが問題を引き起こしていると私が思うようにできるだけ多くデバッグしました。 これで、クエリのデータでいっぱいのコンボボックスができました。

「名前」と「キーコード」の2つの列があります。

accCollection.DisplayMember = "name"; 

次に、名前に対応するキーコード値を取得するために、次のコマンドを使用します。

string acct = accCollection.SelectedValue.ToString(); 

問題は、キーコードが名前と一致しないことです。私はこれが私のクエリかもしれませんが、私がしたことは、コンボボックスを塗りつぶす前に、データグリッドビューにクエリ結果を表示することでした。データグリッドビューに正しい結果が表示され、間違ったコードを使用していると思われます。

もう一つのコードが欲しいと思ったら、私はこの記事を編集します。あなたは私はすでにデータ部材

accCollection.DataSource = myTable; 
accCollection.DisplayMember = "name"; 
accCollection.ValueMember = "keycode"; 

UPDATEが割り当てられている:::: [OK]を、いくつかの詳細情報を見ることができるよう

UPDATEはHERESにコード私は、言及を忘れてしまいました。選択された値は名前のアカウント番号である1557です。しかし、私は1855を取得します。これは別のアカウント番号です。私はdatatableが正しいと言ったように....これはなぜsoooooooooは混乱しているのです!

いくつかのコードが更新されているので、コンボボックスの情報をどのように更新するのか分かります!

SqlCommand accountFill = new SqlCommand("SELECT name, keycode FROM dbo.Customer", conn1); 
SqlDataAdapter readacc = new SqlDataAdapter(accountFill); 
DataTable dt = new DataTable(); 


readacc.Fill(dt); 
dataGridView3.DataSource = dt; 
conn1.Close(); 
accCollection.DataSource = dt; 
accCollection.DisplayMember = "name"; 
accCollection.ValueMember = "keycode"; 

次に、他のクエリを呼び出すタスクに次のものを渡します。

private void button1_Click_1(object sender, EventArgs e) 
{ 
    checkBox1.Checked = true; 
    string acct = accCollection.SelectedValue.ToString(); 

    Task t = new Task(() => GetsalesFigures(acct)); 
    t.Start(); 
} 

UPDATE ::ちょうど私が得るデータを表示する! enter image description here

okこれで、デバッグの助けを借りて、次のコードを使用してこれらのレビューを取得しました。

var result = accCollection.SelectedValue; 
if (result != null) 
{ 
    MessageBox.Show(result.ToString()); 
} 

これは

を間違って1885年には=が、私はこれを行うとき。

DataRowView row = (DataRowView)accCollection.SelectedItem; 
if (row != null) 
{ 
    MessageBox.Show(row[0] + " " + row[1]); 
} 

そのショー正しいデータ、 "メルクシャム" "1557"

これはなぜでしょうか?

+1

したがって、 'accCollection.SelectedValue.ToString()'の結果は何ですか?あなたが取得するキーコードは何ですか? – Otiel

+0

に既に値メンバが割り当てられています – lemunk

答えて

3

プロパティSelectedValueまたはSelectedItemプロパティを使用できますが、戻り値がnullかどうかを確認する必要があります。

DataTableをバインドすると、SelectedItemプロパティはDataRowViewを返します。 SelectedValueのの場合

DataRowView row = (DataRowView)accCollection.SelectedItem; 
if(row!=null) 
{ 
    MessageBox.Show(row[0] + " " + row[1]); 
} 

var result = accCollection.SelectedValue; 
if (result != null) 
{ 
    MessageBox.Show(result.ToString()); 
}   

EDIT:Form_Loadイベントで

コード:

private void Form1_Load(object sender, EventArgs e) 
{ 
    DataTable dt = new DataTable(); 
    dt.Columns.Add("A1", typeof(int)); 
    dt.Columns.Add("A2"); 
    dt.Rows.Add(1, "A"); 
    dt.Rows.Add(2, "B"); 

    comboBox1.DataSource = dt; 
    comboBox1.DisplayMember = "A2"; 
    comboBox1.ValueMember = "A1"; 
} 

コードボタンのクリックハンドラで:

var result = comboBox1.SelectedValue; 
if (result != null) 
{ 
    MessageBox.Show(result.ToString()); 
} 


DataRowView row = (DataRowView)comboBox1.SelectedItem; 
if (row != null) 
{ 
    MessageBox.Show(row[0] + " " + row[1]); 
} 
+0

を更新して値を表示し、値は – lemunk

+1

になるはずです@StevenSmith - データベースの結果が正しくない可能性があります。 SelectedItemプロパティは、常に基になるDataSourceのDataRowを返します。キーコードはユニークですか? – adatapost

+0

ちょうど私のポイント、dboは100%正しいです、クエリは100%正しいです、iveも確かめるためにデータグリッドに表示されます。私はコンボボックスから値を取るとき、その間違った........男の人はそう – lemunk

3

いくつかのこと:

  1. DisplayMemberプロパティは列の名前でなければなりませんがコンボボックス内に表示されます。
  2. ValueMemberプロパティは、項目の値である列の名前である必要があります。

    string acct = accCollection.SelectedValue.ToString(); 
    

    表示テキストを取得します:

    accCollection.DisplayMember = "name"; 
    
    accCollection.ValueMember = "key"; 
    

    あなたが使用する必要があり、選択した項目の値が必要な場合

    string acct = accCollection.SelectedText; 
    

は詳細についてはthisを参照してください。

+0

そして、選択されたアイテムの表示テキストを取得するには: 'string accText = accCollection.SelectedText; ' – Otiel

+0

は既に値メンバが割り当てられています – lemunk

+0

@Otiel:良い点が更新されました。 – Muse

0

DataTable &私は、データ型を表示するコンボボックスにdataTableをバインドするために使用しました。私は変数にデータテーブル内にあるタイトルIDを取得したかったのです。

 cmbTitle.DataSource=dataTable; 
     cmbTitle.DisplayMember="title_type"; 
     cmbTitle.ValueMember="id"; 

は次にcmbtitleの選択変更イベントで、私は、文字列に選択された値のメンバーを持って、それが外部キーであるようにバックデータベースのためにそれを保存する整数にで解析されました。

private void cmb_title_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     string userTitle = cmb_title.SelectedValue.ToString();    
     int.TryParse(userTitle, out this.userTitle); 
     MessageBox.Show(this.userTitle.ToString());    
    } 
関連する問題