DataGridView
C# フォーム アプリケーションにテーブル ( ) があります。オブジェクトのリストはbinded
それにあります。選択した行からバインドされたオブジェクトを取得できます。
しかし、リストからオブジェクトのみを取得して、テーブルでプログラムで行を選択したいと考えています。どうすればいいですか?
Index
(整数値)で選択したくありません。
DataGridView
C# フォーム アプリケーションにテーブル ( ) があります。オブジェクトのリストはbinded
それにあります。選択した行からバインドされたオブジェクトを取得できます。
しかし、リストからオブジェクトのみを取得して、テーブルでプログラムで行を選択したいと考えています。どうすればいいですか?
Index
(整数値)で選択したくありません。
あなたBindingSource = BindList<CPatient>
がこれを使うことができるなら
public class CPatient
{
public int Id { get; set; }
public string IdNo { get; set; }
public string Name { get; set; }
}
読み込みイベント
//Global Variable
BindingList<CPatient> bind = new BindingList<CPatient>();
BindingSource bs = new BindingSource();
private void Form1_Load(object sender, EventArgs e)
{
bind.Add(new CPatient { Id = 1, IdNo = "1235", Name = "test" });
bind.Add(new CPatient { Id = 2, IdNo = "6789", Name = "let" });
bind.Add(new CPatient { Id = 3, IdNo = "1123", Name = "go" });
bind.Add(new CPatient { Id = 4, IdNo = "4444", Name = "why" });
bind.Add(new CPatient { Id = 5, IdNo = "5555", Name = "not" });
bs.DataSource = bind;
dataGridView1.DataSource = bs;
}
クリックイベント
private void button1_Click_1(object sender, EventArgs e)
{
bs.Position = bs.List.Cast<CPatient>().ToList().FindIndex(c => c.Id == 5);
}
私はそのようなことを試みます:
var row = dataGrid.Rows
.Cast<DataGridViewRow>()
.FirstOrDefault(r => (CPatient)r.DataBoundItem = myItem);
var rowIndex = row != null ? row.Index : -1;
そのオブジェクトを使用してバインドされた行が grid に含まれていない場合は、行インデックスまたは -1 を返す必要があります。
ユーザーが実行時に dataGrid を並べ替えることができる場合は、row.DisplayIndex
代わりに使用できます。row.Index
それDataGridViewBand.Index
は、次の発言があるためです。
このプロパティの値は、コレクション内のバンドの現在の視覚的位置に必ずしも対応していません。たとえば、ユーザー
DataGridView
が実行時に列を並べ替えた場合 (AllowUserToOrderColumns
プロパティが true に設定されていると仮定)、Index
各列のプロパティの値は変更されません。代わりに、列のDisplayIndex
値が変更されます。ただし、行を並べ替えるとIndex
値が変わります。