2013-03-25 2 views
1

나는 기본 폼은 기본적으로 SELECT 제표를 기준으로 두 개의 콤보 상자를 채 웁니다 콤보 상자와 System.Data.DataRowView

private void populateComboBoxes() 
{ 
    SqlCeDataAdapter breakfastAdapter = new SqlCeDataAdapter("SELECT DISTINCT recipeName FROM Recipe WHERE Category = 'breakfast' ", databaseConnection); 
    SqlCeDataAdapter lunchAdapter = new SqlCeDataAdapter("SELECT DISTINCT recipeName FROM Recipe WHERE Category = 'lunch' ", databaseConnection); 
    breakfastAdapter.Fill(breakfastDS, "Recipe"); 
    lunchAdapter.Fill(lunchDS, "Recipe"); 
    cmbBox1.DisplayMember = "recipeName"; 
    cmbBox1.ValueMember = "recipeName"; 
    cmbBox1.DataSource = breakfastDS.Tables["Recipe"]; 
    cmbBox2.DataSource = lunchDS.Tables["Recipe"];    
    cmbBox2.DisplayMember = "recipeName"; 
    cmbBox2.ValueMember = "recipeName";      
} 

을 열 때 호출되는 방법이있다. 이 방법은 cmbBox1.DataSource = breakfastDS.Tables["Recipe"] 안타 일단은 실행을 중지하고이 방법으로 이동 :

private void cmbBox1_SelectedIndexChanged(object sender, EventArgs e) 
{   
    rtbPicture.Visible = false; 
    string qry = ""; 
    qry = "SELECT DISTINCT ingredientName FROM Recipe WHERE recipeName = " + cmbBox1.SelectedItem.ToString(); 

    SqlCeCommand com = new SqlCeCommand(qry, databaseConnection); 
    com.CommandText = qry; 
    rtbRecipe.Text = com.ExecuteScalar().ToString(); 
} 

이 방법은 SELECT 문을 실행하고 richtextbox에 해당 정보를 넣어하도록되어 있지만, 어떤 이유로 cmbBox1가 설정되어 있지 않습니다. 내 이해에서 첫 번째 combobox 이미 이전 메서드에서 표시 및 값 멤버를 설정했습니다. 그러나 cmbBox1.SelectedItem.ToString()에 도달하면 combobox에 실제 문자열 대신 System.Data.DataRowView을 반환합니다. 왜 문자열 대신에 System.Data.DataRowView이 나에게 줄 수 있는지 잘 모르겠습니다.

답변

3

cmbBox1.SelectedItem.ToString()을 사용하고 있습니다. 당신은 아마 대신 SelectedValue를 사용한다 : SelectedValue 당신이 ComboBoxValueMember로 지정된 속성의 값을 가져옵니다 반면

qry = "SELECT DISTINCT ingredientName FROM Recipe WHERE recipeName = " + cmbBox1.SelectedValue.ToString(); 

SelectedItem이, (이 경우 DataRowView에서) 실제 ComboBox 항목을 가져옵니다.

+0

고마워요! 'cmbBox1.DataSource = breakfastDS.Tables [ "Recipe"]'가 콤보 박스 변경을 트리거하지 않게하려면 어떻게합니까? 실제로 두 번째 방법은 콤보 박스에서 실제로 선택하는 경우에만 입력하고 싶습니다. – Lohkii

+1

@Lohkii, 고마워. 당신의 질의에 대해서'SelectedChangeCommitted' 이벤트를'SelectedIndexChanged' 대신에 사용하려고하면, 사용자가'ComboBox'에서 값을 선택했을 때만 활성화된다는 것을 알 수 있습니다. –

+0

Btw @ Lohkii, 내 대답에 만족하고 문제를 해결 한 경우 (대답 한대로) 질문에 답을 표시해 주시겠습니까? 고맙습니다! –

0

cmbBox2.DisplayMember = "recipeName";

cmbBox2.DataSource = lunchDS.Tables [ "Recipe"];

cmbBox2.ValueMember = "recipeName";

+0

잠깐, 다른 사람들이 이해할 수 있도록 조금 자세하게 설명해 주시겠습니까? – simonmorley

관련 문제