(.Net)カスタムクラスをDataGridViewにバインドしたときに、選択したレコードのオブジェクトを取得する
List
.Net にはそのためのプロパティが用意されていました。
それは、DataGridViewRow.DataBoundItemプロパティです。
詳しくはMSDN:方法 : Windows フォームの DataGridView 行にバインドされたオブジェクトにアクセスするが参考になります。
ただ、行選択モード(DataGridViewSelectionMode)が FullRowSelect にしといたほうが安全ですね。
セルだけ選択した場合は取得できないようなので。。。
とりあえず、サンプルです。(C#)
public partial class Form1 : Form{
List
mlst = new List ();
private void Form1_Load(object sender, EventArgs e) {
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
mlst.Add(new user("hogehoge1", "1"));
mlst.Add(new user("hogehoge2", "2"));
mlst.Add(new user("hogehoge3", "3"));
dataGridView1.DataSource = null;
dataGridView1.DataSource = mlst;
}
private void button3_Click(object sender, EventArgs e) {
foreach (DataGridViewRow row in dataGridView1.SelectedRows) {
//選択したレコードに対応するオブジェクトを取得
user u =(user)row.DataBoundItem;
Console.WriteLine(u.name + " , " + u.id);
}
Console.WriteLine();
}
}
//カスタムクラス(エンティティ)
public class user{
public string name { get; set; }
public string id { get; set; }
public user(string sname, string sid) {
name = sname;
id = sid;
}
}