2012-10-20 2 views
1

Entity Framework를 사용하여 데이터베이스에서 검색 한 데이터 목록을 보여주는 Combobox가 있습니다.Entity Framework - 검색된 Combobox 값을 문자열로 캐스팅

using System; //I removed the other using statements here to preserve space 

namespace ExTea_BackEnd 
{ 
    public partial class frmAddBreakdown : Form 
    { 
     ExTeaEntities Breakdowns; 
     Breakdown_Type BreakdownTypes; 

     public frmAddBreakdown() 
     { 
      InitializeComponent(); 
     } 

     private void cmbBreakdownType_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      Breakdown_Type breakdownType = (Breakdown_Type)cmbBreakdownType.SelectedItem; 
      string selectedBreakdownTypeId = breakdownType.BrkdwnId; 

      IQueryable<Breakdown_Type> breakdownTypeQuery = from t in Breakdowns.Breakdown_Types 
                  where t.BrkdwnId == selectedBreakdownTypeId 
                  select t; 
      List<Breakdown_Type> selectedBreakdownId = breakdownTypeQuery.ToList(); 

      if (selectedBreakdownId != null && selectedBreakdownId.Count > 0) 
      { 
       BreakdownTypes = selectedBreakdownId.First(); 
       txtBreakdownId.Text = BreakdownTypes.BrkdwnId.ToString(); 
      } 
      else 
      { 
       BreakdownTypes = null; 
      } 
     } 

     private void btnAdd_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       Breakdown newBreakdown = new Breakdown(); 

       Breakdown_Type breakdownType = (Breakdown_Type)cmbBreakdownType.SelectedItem; 
       newBreakdown.BrkdwnType = breakdownType.ToString(); //this is where the error occurs 

       newBreakdown.MachineId = txtMachineId.Text.Trim(); 
       newBreakdown.MachineType = txtMachineType.Text.Trim(); 
       newBreakdown.ReportedDate = dtpDate.Value; 
       newBreakdown.JobStatus = "I"; 

       Breakdowns.AddToBreakdowns(newBreakdown); 
       int rowsAffected = Breakdowns.SaveChanges(); 
       if (rowsAffected > 0) 
       { 
        MessageBox.Show(rowsAffected + " records added!", "Save", MessageBoxButtons.OK, MessageBoxIcon.Information); 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Error occured! " + ex.Message); 
      } 
     } 
    } 
} 

데이터를 다시 데이터베이스에 저장하려고하면 Combobox에서 선택한 값을 캐스팅 할 때 오류가 발생합니다. 올바른 유형으로 캐스팅 한 경우에도 선택한 값이 저장되지 않습니다! 그러나 이것은,

enter image description here

I가 우둔 해요

은 내가 잘못 여기서 뭘하는지? 아무도 이것을 해결하는 방법을 말해 줄 수 있습니까?

감사합니다. 여기

답변

1
newBreakdown.BrkdwnType = breakdownType.ToString(); 

당신은 개체의 .ToString() 방법을 요구하고있다, 그래서 당신은

에 문을 변경해야 BrkDwnType 속성 값을 얻기 위해, 데이터베이스 테이블 레코드에 볼 수있는 형식 이름을 반환
newBreakdown.BrkdwnType = breakdownType.BrkdwnType; 
+0

정답과 설명 주셔서 대단히 감사합니다. :) – Isuru

0

그냥해야한다 :

  newBreakdown.BrkdwnType = cmbBreakdownType.SelectedItem.ToString(); 

그냥 문자열 값을 원하는 경우 selectedItem가 캐스팅에 대한 필요합니다. 디자인의 관점에서 보았을 때 데이터베이스를 표준화하고 BreakDown 유형이있는 다른 테이블을 참조하는 breakDownType에 대한 ID를 사용해야합니다.