データベースにユーザーデータ(名前、ユーザー名、画像)があり、コンボボックスに名前と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;
}
}
}
コンボボックスに追加しようとしていますが、同時に、そのアイテムが選択されている場合は画像を画像ボックスに送信しようとしています。私のコードは何もしません。エラーなどは発生しません。ヘルプ!