2013-08-02 154 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。下面是代碼,我得到的值到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(); 
} 

如何添加一個新的包到列表中,當一個項目使用所選擇項的值成員,displaymember檢查部分?

編輯:好吧,也許我正在做這個完全錯誤的。我不會告訴你我做了什麼,而是告訴你我想要發生什麼。

我向用戶展示一個帶有複選框旁邊的名單列表的checkedlistbox。他們可以選擇多個。這導致我在我的查詢和名稱中使用一個或多個ID作爲描述。我需要通過我的上下文傳遞我的「包」中的一個或多個ID /名稱組合。

什麼是最好的捕獲用戶選擇的ID和名稱組合,並將它們傳遞到我的上下文中?

+1

Winforms? Web表單? MVC? –

+0

@TheSolution我標記winforms由於使用CheckedListBox – 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(); 

第三: 填充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 
} 

旁註:我建議你重命名爲PackagesPackage,PackageIDIDPackageNameName(如在示例代碼中已經提出的)。

+0

什麼時候我將列表分配給我的checkedlistbox控件?我不認爲我做過這樣的事情? – Leslie

+0

@蕾絲莉你是對的。我在一秒內編輯我的答案。 –

+0

@萊斯利還展示瞭如何相應地設置數據源。 ;) –

相關問題