1

DataGridViewC# フォーム アプリケーションにテーブル ( ) があります。オブジェクトのリストはbindedそれにあります。選択した行からバインドされたオブジェクトを取得できます。

しかし、リストからオブジェクトのみを取得して、テーブルでプログラムで行を選択したいと考えています。どうすればいいですか?

Index(整数値)で選択したくありません。

4

2 に答える 2

2

あなた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);
 }
于 2013-02-24T08:13:21.450 に答える
1

私はそのようなことを試みます:

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値が変わります。

于 2013-02-23T15:04:18.697 に答える