1

Entity Framework を使用して、データベースから取得したデータのリストを表示するコンボボックスを作成しました。

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

フォームのデータをデータベースに保存しようとしていますが、コンボボックスから選択した値をキャストしようとするとエラーが発生します。正しい型にキャストしても、選択した値が保存されません! でもこれは、

ここに画像の説明を入力

ここで何が間違っているのかわかりませんか?誰でもこれを修正する方法を教えてもらえますか?

ありがとうございました。

4

2 に答える 2

1
newBreakdown.BrkdwnType = breakdownType.ToString();

ここでは、オブジェクトのメソッドを呼び出しているだけ.ToString()なので、データベーステーブルレコードで表示できるタイプ名を返します。これにより、ステートメントを次のように変更する必要があるBrkDwnTypeプロパティ値を取得できます。

newBreakdown.BrkdwnType = breakdownType.BrkdwnType; 
于 2012-10-20T09:19:01.297 に答える
0

それはちょうどあるべきです:

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

文字列値だけが必要な場合は、selectedItem をキャストする必要はありません。設計の観点からは、おそらくデータベースを正規化し、BreakDown タイプの別のテーブルを参照する breakDownType の ID を使用する必要があります。

于 2012-10-20T09:30:09.113 に答える