2013-08-02 11 views
6

誰かがこれまでに尋ねてきたと確信していますが、私が探しているものを見つけることができないため、正しい用語やものを探していません。C#リストオブジェクトをチェックボックスから追加する

私はクラスのパッケージを持っている:

class Packages 
{ 
    string PackageID {get; set;} 
    string PackageName { get; set; } 
} 

は、私は私のコンテキスト内のパッケージのリストを持っています。

public class TransferJobContext 
{ 
    public string ImportFile; 
    public string WorkSheetName; 
    public DataSet TransferData; 
    public List<Packages> Packages = new List<Packages>(); 
} 

データソースにバインドされたフォーム上にcheckedListBoxがあります。ここで私は項目が選択した項目の値のメンバーとdisplaymemberを使用してチェックされたとき、私はリストに新しいパッケージを追加するにはどうすればよいにCheckedListBox

using (var connection = my_DB.GetConnection()) 
{ 
    try 
    { 
     connection.Open(); 
     SqlDataReader rdr = null; 
     dt = new DataTable(); 
     string CommandText = "SELECT ID, Name FROM TABLENAME WHERE UPPER(Import_File_Source) LIKE '%abc%' and STATUS = 1"; 

     SqlCommand cmd = new System.Data.SqlClient.SqlCommand(CommandText, connection); 

     rdr = cmd.ExecuteReader(); 
     dt.Load(rdr); 
     cbPackages.DataSource = dt; 
     cbPackages.ValueMember = "ID"; 
     cbPackages.DisplayMember = "Name"; 

    } 
    catch (Exception E) 
    { 
     MessageBox.Show(E.Message.ToString()); 
    } 
    connection.Close(); 
} 

に値を取得するコードのセクションがありますか?

編集:おそらく私はこれについて完全に間違っています。私が何をしたかを伝える代わりに、私は何が起こりたいかを教えてくれるでしょう。

チェックリストボックスの横にチェックボックスが付いたチェックリストボックスをユーザに提示しています。彼らは複数を選択することができます。これは私のクエリで使用する1つまたは複数のIDと説明として使用する名前を持つことになります。私は自分のコンテキストで、私の "パッケージ"のid/nameの組み合わせを渡す必要があります。

ユーザーが選択したID /名前の組み合わせをキャプチャして自分のコンテキストに渡すのに最適なものは何ですか?

+1

Winforms? Webフォーム? Mvc? –

+0

@TheSolution私はCheckedListBoxの使用のためにwinformsをタグ付けしました – CodingIntrigue

+0

はいWinforms、申し訳ありません、私はC#に新しく追加することを忘れています: – Leslie

答えて

1

まず:データベースから既存のパッケージを取得する:

public function GetPackages() as List<Package> 
{ 
using (var connection = my_DB.GetConnection()) 
    { 
     try 
     { 
      connection.Open(); 
      SqlDataReader rdr = null; 
      dt = new DataTable(); 
      string CommandText = "SELECT ID, Name FROM TABLENAME WHERE UPPER(Import_File_Source) LIKE '%abc%' and STATUS = 1"; 

      SqlCommand cmd = new System.Data.SqlClient.SqlCommand(CommandText, connection); 

      var packages = new List<Package>(); 
      using(var reader = cmd.ExecuteReader()) 
      { 
      do while(reader.Read()) 
       { 
       packages.Add(new Package({ID = reader.GetString(0), Name = reader.GetString(1)}) 
       } 
      } 

      cbPackages.DataSource = packages; 
      cbPackages.ValueMember = "ID"; 
      cbPackages.DisplayMember = "Name"; 
      return packages; 
     } 
     catch (Exception E) 
     { 
      MessageBox.Show(E.Message.ToString()); 
      return new List<Package>(); 
     } 
     connection.Close(); 
    } 

}

第二: はあなたのコンテキストのインスタンスにフェッチされたパッケージを割り当てます。

yourContext.Packages = GetPackages(); 

第3位: あなたのパッケージとにCheckedListBoxを入力します。

最後に
cbPackages.DataSource = yourContext.Packages; 
cbPackages.ValueMember = "ID"; 
cbPackages.DisplayMember = "Name"; 

:ユーザーの入力した後を、checkedpackagesを取得し、あなたも一緒にやりたい:

foreach (Package item in checkedListBox1.CheckedItems) 
{ 
    MessageBox.Show(Package.ID); 
    MessageBox.Show(Package.Name); 
    //do whatever you want here e.g. pass it back to the context 
} 

追記:私はあなたをお勧めしますPackagesからPackagePackageIDからIDおよびPackageNameからName(すでに例のコードで提案されています)という名前に変更してください。

+0

私のチェックリストボックスコントロールにリストを割り当てたのはいつですか?私はそれのような何かをやったとは思わない? – Leslie

+0

@Leslieあなたが正しいです。私は1秒で私の答えを編集する。 –

+0

@Leslieは、それに応じてデータソースを設定する方法も示しました。 ;) –