2016-05-12 16 views
1

私はデータソース(データベース)を持つ1つのコンボボックスを持っていますが、私はLINQを使用しています。 この私のコードで:私はコンボボックスのデータソースに問題があります

private void Return_Load(object sender, EventArgs e) 
{ 
     button1.Enabled = false; 
     var buka = (from db in Program.data.Transactions where db.ReturnDate == null select db); 
     comboBox1.DataSource = buka; 
     comboBox1.SelectedIndex = -1; 


    } // my form load 

と、この私のコンボボックスが選択されたインデックス:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 


      var open = (from db in Program.data.Transactions where db.TransactionID == comboBox1.Text select db).FirstOrDefault(); 

      label10.Text = open.StaffID; 
      label11.Text = open.ClientName; 
      label12.Text = open.CarID; 
      label13.Text = open.StartDate.ToString(); 
      label14.Text = open.EndDate.ToString(); 
      label15.Text = DateTime.Now.ToString("dd MM yyyy"); 

      var car = (from db in Program.data.MsCars where db.CarID == label12.Text select db).FirstOrDefault(); 
      int rentduration; 
      int lateduration; 
      double extrachange; 
      double totalprice; 
      string a = car.Price.ToString(); 
      rentduration = open.EndDate.Value.DayOfYear - open.StartDate.Value.DayOfYear; 
      lateduration = DateTime.Now.DayOfYear - open.EndDate.Value.DayOfYear; 

      totalprice = rentduration * double.Parse(a); 

      label17.Text = totalprice.ToString(); 
     } 

私の問題は、データベースからのコンボボックスのデータソースを追加する方法ですか?コンボボックスは配列を使うことを考えています。

+0

'var buka =(...)。ToList();' –

+0

'comboBox1.DisplayMember =" PropertyName ";' –

答えて

0

私は完全に質問を理解している場合、私はわからないんだけど、あなたのコンボボックスは、(Return_Load法によって仮定として)LINQクエリですべての結果のためのコンボボックスでProgram.data.Transactionsを示している場合、あなたはDisplayMemberプロパティを検討する必要がありますあなたのユーザに提示したい値(ディスプレイ上)と、TransactionIDのような、あなたが作業したい値の場合はValueMemberとなります。

また、レコードを列挙するためにToListメソッド()関数を呼び出す必要があるかもしれません -

var buka = (from db in Program.data.Transactions where db.ReturnDate == null select db).ToList(); 

あなたがValueMemberでのセットアップを持ったら、あなたは、関連するデータ型にキャスト(combobox1.SelectedValueためcombobox1.Textに置き換えますそれに応じて)

、その後、あなたのSelectedIndexChangedハンドラでは、あなたが使用することができます(同じ値を表示して使用するように)「TRANSACTIONID」にDisplayMemberとComboBox1ののValueMemberでの設定:

var open = (from db in Program.data.Transactions where db.TransactionID == (object_type)comboBox1.SelectedValue select db).FirstOrDefault(); 

... object_typeを実際のタイプ(文字列、整数など)に置き換えてください。

...と...

var car = (from db in Program.data.MsCars where db.CarID == open.CarID select db).FirstOrDefault(); 

NullReferenceExceptionsのためにテストし、レコードが優雅に存在しない場合は何が起こるかを扱うようにしてください。

+0

データバインディングに関する参考資料:http://www.akadia.com/services/dotnet_databinding html –

+0

私はそれを持っていますが、私はフォームをロードし、私はコンボボックスのインデックスを変更する前に、私のすべてのラベルは、データベースの値に変更されます –

関連する問題