6

誰かが以前にこれを尋ねたと確信していますが、探しているものが見つからないように見えるので、適切な用語や何かを探していません.

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

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

選択したアイテムの value メンバーと displaymember を使用してアイテムがチェックされているときに、新しいパッケージをリストに追加するにはどうすればよいですか?

編集: わかりました多分私はこれについて完全に間違っています。私が何をしたかを話す代わりに、私が何をしたいかを話します。

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

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

4

1 に答える 1

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

}

2番目: 取得したパッケージをコンテキストのインスタンスに割り当てます:

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することをお勧めします(コード例で既に提案されているように)。PackagePackageIDIDPackageNameName

于 2013-08-02T11:21:03.587 に答える