次のクラス設計からの情報を表示する WinForms のマスター/詳細 Datagridviews のペアがあります。
public class Roads
{
private List<CrossStreets> _crossStreets = new List<CrossStreets>();
public string RoadName { get; set; }
public List<CrossStreet> CrossStreets { get { return _crossStreets;} }
}
public class CrossStreet
{
public string CrossStreetName { get; set;}
}
私の実装では、レコードの挿入、更新、および削除が可能であり、BindingSource() の魔法がデータ関係の同期を舞台裏で維持しているようです。私が抱えている問題の 1 つは、ユーザーが詳細ビューでレコードをクリックし、それを選択したままにし、マスター ビューで親レコードではないレコードをクリックしたときです。その時点で、プログラムは System.IndexOutOfRangeException をスローします。これは、子レコードの現在のインデックスを新しい親レコードに適用しようとしているように見えるためです。
これをキャッチするためにRowValidatingなどのイベントでできることがあると思いますが、何がわからないのですか。現在、次のような新しい行とデータ検証の基本的なチェックを行っています。
private void dataGridSegmentConfig_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
{
if (dataGridViewSegmentConfig.Rows[e.RowIndex].IsNewRow)
{
return;
}
//data validation logic here.
}