协调主/细节数据网格视图

本文关键字:数据网 网格 视图 数据 细节 协调 | 更新日期: 2023-09-27 17:56:00

我在WinForms中有一对主/细节数据网格视图,显示来自以下类设计的信息:

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

协调主/细节数据网格视图

datagridview 正在尝试基于选定的父行设置子行的索引。如果父行中的记录少于子行的选定索引,则会引发 IndexOutOfRangeException。为了解决这个问题,我确保在父行更改时将子单元格设置为 null。

  private void dataGridRouteConfig_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
        {
            //fix for clicking the detail and then clicking a different parent.
            dataGridViewSegmentConfig.CurrentCell = null;
        }