我确信有人之前已经问过这个问题,但我并不是在寻找正确的术语或者其他东西,因为我似乎无法找到我想要的东西.
我有一个类包:
class Packages
{
string PackageID {get; set;}
string PackageName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的上下文中有一个包列表.
public class TransferJobContext
{
public string ImportFile;
public string WorkSheetName;
public DataSet TransferData;
public List<Packages> Packages = new List<Packages>();
}
Run Code Online (Sandbox Code Playgroud)
我的表单上有一个绑定到数据源的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();
}
Run Code Online (Sandbox Code Playgroud)
使用所选项的值成员和显示成员检查项目时,如何将新包添加到列表中?
编辑: 好吧,也许我说这完全错了.我没有告诉你我做了什么,而是告诉你我想要发生什么.
我向我的用户展示了一个checkedlistbox,其中包含一个名称列表,旁边有复选框.他们可以选择多个.这导致我在我的查询中使用一个或多个ID以及用作描述的名称.我需要传递我的上下文我的"包"的一个或多个id/name组合.
捕获用户所做选择的ID /名称组合并将其传递到我的上下文中的最佳方法是什么?
首先:从数据库中获取现有的包:
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();
}
Run Code Online (Sandbox Code Playgroud)
}
第二: 将获取的包分配给上下文的实例:
yourContext.Packages = GetPackages();
Run Code Online (Sandbox Code Playgroud)
第三: 用你的包填充 CheckedListBox:
cbPackages.DataSource = yourContext.Packages;
cbPackages.ValueMember = "ID";
cbPackages.DisplayMember = "Name";
Run Code Online (Sandbox Code Playgroud)
最后:用户输入后,获取已检查的包并对其执行任何您想要的操作:
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
}
Run Code Online (Sandbox Code Playgroud)
旁注:我建议您将其重命名Packages为Package、PackageIDtoID和PackageNameto Name(如示例代码中已建议的那样)。