0

データベースにユーザーデータ(名前、ユーザー名、画像)があり、コンボボックスに名前とIDをリストする必要があります。コンボボックスの項目を選択すると、画像が表示されます。UserクラスとUserDBクラスを作成しました。私のUserクラスには、次のコードがあります。

public class User
  {
    private String u_firstname;
    private String u_lastname;
    private String u_username = string.Empty;
    private Byte [] u_image;
    private Byte [] u_template;


    public User(OleDbDataReader dr)
    {            
        u_firstname = dr["USER_FIRST_NM"].ToString();
        u_lastname = dr["USER_LAST_NM"].ToString();
        u_username = dr["USER_NAME"].ToString();
        u_image = (Byte [])dr["USER_IMAGE"];
        u_template = (Byte [])dr["USER_TEMPLATE"];

    }
}

私のUserDBクラスには、次のコードがあります。

public class UserDB
 {
    public static String workingDirectory = System.IO.Directory.GetCurrentDirectory();
    public static String dbProvider = "Microsoft.ACE.OLEDB.12.0";
    public static String dbName = "Users_DB.accdb";        
    public static String dbConnString = String.Format(@"Provider={0};Data Source={1}\Data\{2}", dbProvider, workingDirectory, dbName);


    public User[] usersInDatabaseList()
    {
        User u;
        List<User> clist = new List<User>();

        OleDbConnection cn = new OleDbConnection(dbConnString);

        String strSQL = "SELECT USER_FIRST_NM, USER_LAST_NM, USER_NAME, USER_IMAGE, USER_TEMPLATE FROM KF001_USERS";

        OleDbCommand cm = new OleDbCommand(strSQL, cn);
        OleDbDataReader dr;

        cn.Open();

        dr = cm.ExecuteReader(CommandBehavior.CloseConnection);

        while (dr.Read())
        {                
            u = new User(dr);
            clist.Add(u);
        }

        cn.Close();


        return clist.ToArray();
    }
}

mainFormには、コンボボックスに使用している次のメソッドがあります。

public void FillDropDownList()
    {
        try
        {

            //int i;
            UserDB db = new UserDB();
            User[] userList = db.usersInDatabaseList();

            comboBoxUsersEnrolled.Items.AddRange(userList);
            comboBoxUsersEnrolled.DisplayMember = ?      
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
}

データベースの値をコンボボックスに表示する方法について、私は完全に途方に暮れています。また、アイテムを選択したときに画像を表示する方法もわかりません。誰かが私を助けたり、正しい方向に導いてくれますか?

そこで、filldropdownlistメソッドを次のように変更しました。

 public void FillDropDownList()
    {

            UserDB db = new UserDB();
            User[] userList = db.cList();



            for (int i = 0; i < userList.Length; i++)
            {

                comboBoxUsersEnrolled.Items.Add(userList[i]);
                comboBoxUsersEnrolled.DisplayMember = "ComboName";




                if (comboBoxUsersEnrolled.SelectedIndex > 0 )
                {

                    byte[] pictureByteReader = (userList[i].UserImage);
                    MemoryStream ms = new MemoryStream(pictureByteReader);
                    Image picture = Image.FromStream(ms);
                    picBoxCapture.Image = picture;
                }

            }


    }

コンボボックスに追加しようとしていますが、同時に、そのアイテムが選択されている場合は画像を画像ボックスに送信しようとしています。私のコードは何もしません。エラーなどは発生しません。ヘルプ!

4

1 に答える 1

0

あなたはすでにほとんどの仕事をしました。

DisplayMemberマークしたプロパティは、ComboBoxに表示するために使用する必要があるプロパティを示し?ます。クラスにはプロパティがなく、フィールドしかないため、最初にプロパティを作成する必要があります

public class User
{
    // all your existing fields

    public string Name
    {
        get
        {
            return this.u_username;
        }
    }

次にDisplayMember = "Name";、Nameを表示プロパティとして使用するように設定できます。

画像を使用するには、より多くの作業が必要です。文字列の代わりに、コンボボックスでテンプレートを使用する必要があります。例を見つけるためにそれをグーグルしてみてください。

于 2012-10-12T02:51:08.523 に答える