指定したコード行が正しくありません。ValueMember
コンボボックスの値は、選択したオブジェクトの値にしたいプロパティまたは列の名前に設定する必要があります(たとえば、一意のID)。しかし、あなたはフィールドの内容で埋めています。ValueMember
この方法でコンボボックスをバインドすると(との組み合わせでデータソースを設定DisplayMember
)ValueMember
、コンボボックスのプロパティは選択した行のフィールドのSelectedValue
値で埋められます。ValueMember
たとえば、ActorID、Name、BirthDateの各列にデータが含まれるDataTableがあるとします。
DataTable dt = new DataTable();
dt.Columns.Add("ActorID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("BirthDate", typeof(DateTime));
dt.Rows.Add(1, "Will Smith", new DateTime(1968,9,25));
dt.Rows.Add(2, "Bruce Willis", new DateTime(1955,3,19));
dt.Rows.Add(3, "Jim Carrey", new DateTime(1962, 1, 17));
dt.Rows.Add(18, "Nicole Kidman", new DateTime(1967,6,20));
ComboBox cb = new ComboBox();
cb.DropDownStyle = ComboBoxStyle.DropDownList;
cb.Location = new Point(20, 100);
cb.Width = 100;
cb.DisplayMember = "Name"; // *****
cb.ValueMember = "ActorID"; // ***** The important part
cb.DataSource = dt;
Button btn = new Button();
btn.Text = "Show ID";
btn.Location = new Point(10, 140);
btn.Click += (sender, e) =>
{
MessageBox.Show(cb.SelectedValue.ToString()); // **** The other important part.
};
Form f = new Form();
f.Controls.Add(cb);
f.Controls.Add(btn);
f.ShowDialog();
コンボボックスのを読み取るSelectedValue
と、選択した行の「ActorID」が取得されます。