【问题标题】:Coordinating Master/Detail DataGridViews协调主/详细数据网格视图
【发布时间】:2013-01-08 19:47:30
【问题描述】:

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

【问题讨论】:

    标签: c# winforms datagridview master-detail


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-02-11
      • 2011-10-05
      • 2015-11-11
      • 1970-01-01
      • 2012-08-06
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      相关资源
      最近更新 更多