我在 WinForms 中有一对 Master/Detail 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() 的魔力似乎可以让我的数据关系在幕后保持同步。我遇到的一个困难是当用户单击详细信息视图中的记录,将其保持选中状态,然后单击主视图中不是父记录的记录时。此时,程序会抛出 System.IndexOutOfRangeException,因为它似乎正在尝试将子记录的当前索引应用于新的父记录。
我认为在诸如 RowValidating 之类的事件中我可以做些什么来捕捉这个,但我不确定是什么。目前,我只是对新行和数据验证进行基本检查,如下所示:
private void dataGridSegmentConfig_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
{
if (dataGridViewSegmentConfig.Rows[e.RowIndex].IsNewRow)
{
return;
}
//data validation logic here.
}