3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(.Net)カスタムクラスをDataGridViewにバインドしたときに、選択したレコードのオブジェクトを取得する

Listを DataGridView にバインドしてるんですが、ユーザーが行を選択した時に選択された行に対応するオブジェクト取得する方法です。

.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;

}

}