2013-08-02 14 views
6

Jestem pewna, że ​​ktoś już o to pytał, ale nie szukam odpowiednich terminów lub czegoś, ponieważ po prostu nie mogę znaleźć tego, czego szukam.C# dodanie do obiektu listy z pola wyboru

Mam klasy pakiety:

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

Mam listę pakietów w moim kontekście.

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

Mam checkListBox na moim formularzu, który jest powiązany ze źródłem danych. Oto fragment kodu, gdzie mogę uzyskać wartości do 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(); 
} 

Jak dodać nowy pakiet do listy, gdy element jest sprawdzany za pomocą elementu wartości i DisplayMember wybranych maszyn?

Edytuj: Ok może mam zamiar o tym całkowicie źle. Zamiast powiedzieć ci, co zrobiłem, powiem ci, co chciałbym zrobić.

Prezentuję mojego użytkownika z listą kontrolną, która ma listę nazw z polami wyboru obok nich. Mogą wybrać więcej niż jeden. Powoduje to, że mam jeden lub więcej identyfikatorów do wykorzystania w moim zapytaniu i nazwach do wykorzystania jako opis. Muszę przekazać z mojego kontekstu jedną lub wiele kombinacji id/nazwa mojego "Pakietu".

Jak najlepiej przechwycić kombinację ID/Nazwa dokonanych przez użytkownika wyborów i przekazać je do mojego kontekstu?

+1

Winformy? Formularze internetowe? MVC? –

+0

@TheSolution I oznaczyłem winFormy z powodu użycia CheckedListBox – CodingIntrigue

+0

Tak, WinFormy, przepraszam, zapomniałem dodać, że - nowe w C# :) – Leslie

Odpowiedz

1

pierwsze: Fetch istniejących pakietów z bazy danych:

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

}

drugie: Przypisywanie pobranego pakiety do instancji kontekstu:

yourContext.Packages = GetPackages(); 

Po trzecie: Napełnić CheckedListBox ze swoich pakietów:

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

Wreszcie: Po wejściu użytkownika, uzyskać checkedpackages i robić, co chcesz z nimi:

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 
} 

Sidenote: mi proponujesz aby zmienić nazwę Packages na Package, PackageID na ID i PackageName na Name (Jak już zaproponowano w przykładowym kodzie).

+0

kiedy dokładnie mam przypisaną Listę do kontrolki listy kontrolnej? Nie sądzę, że zrobiłem coś takiego? – Leslie

+0

@Leslie Masz rację. Edytuję odpowiedź w ciągu jednej sekundy. –

+0

@Leslie pokazał również, w jaki sposób można odpowiednio ustawić źródło danych. ;) –