C# 在datagridview中选择行将清除选定对象中的列表

C# 在datagridview中选择行将清除选定对象中的列表,c#,list,datagridview,C#,List,Datagridview,这可能是瞎猜,但我的代码中似乎有一个奇怪的bug。我有一个系统,它将一组车辆对象(类称为车辆)存储在业务类中存储的VehicleList中。每个车辆都有一个名为activities的列表属性,该属性存储不同类型的活动。目前,我有一个将车辆添加到datagridview的系统,在该系统中,我可以选择一条记录,并打开一个包含车辆活动列表的表单,在该表单中,我可以添加和删除车辆活动等。将活动添加到当前所选车辆的列表中可以很好地工作。我遇到的问题可能是一个潜在问题,当我打开车辆列表表单并选择一辆车辆查看

这可能是瞎猜,但我的代码中似乎有一个奇怪的bug。我有一个系统,它将一组车辆对象(类称为车辆)存储在业务类中存储的
VehicleList
中。每个车辆都有一个名为activities的列表属性,该属性存储不同类型的
活动
。目前,我有一个将车辆添加到datagridview的系统,在该系统中,我可以选择一条记录,并打开一个包含车辆活动列表的表单,在该表单中,我可以添加和删除车辆活动等。将活动添加到当前所选车辆的列表中可以很好地工作。我遇到的问题可能是一个潜在问题,当我打开车辆列表表单并选择一辆车辆查看其活动列表时,它会从列表中删除所有记录。我做了一些调试,发现活动存储在该车辆的列表中,直到我在datagridview中单击一行

层次结构如下所示:

<Business> //Contains VehicleList
   <VehicleList> //Contains Vehicles
      <Vehicle> //Contains ActivityList 
         <ActivityList> //Contains Activities
其中
\u选择的车辆
=

    private Vehicle _selectedVehicle;

    public Vehicle SelectedVehicle
    {
        get { return _selectedVehicle; }

        set
        {
            _selectedVehicle = value;
        }
    }
以下是车辆类别中的列表:

    private List<Activity> _activityList = new List<Activity>();

    public List<Activity> ActivityList
    {
        get => _activityList;
    }
用于从列表添加到datagridview的方法:

        for (int i = 0; i < Business.VehicleList.Count; i++)
        {
            dataGridViewRegisteredVehicles.Rows.Add(
                Business.VehicleList[i].Registration,
                Business.VehicleList[i].Model,
                Business.VehicleList[i].Make,
                Business.VehicleList[i].Year,
                Business.VehicleList[i].Cost
                );
        }
for(int i=0;i

我尝试将datagridview数据源设置到列表中,但这只是将空单元格添加到datagridview

您面临的问题是
\u selectedVehicle。当您从GridView中选择车辆时,ActivityList
将变为空。这是否正确?是的,这是正确的。调试时,您是否看到
vehicle.ActivityList
是否为空?它显示列表包含单击某行之前的活动,但单击该行之后为空。我添加了两个测试按钮来获取前后的列表计数。我还手动声明了一辆用于测试目的的车辆,这样我就不必单击datagridview,并且带有活动列表的表单显示了所有活动“当前我有一个将车辆添加到datagridview的系统…”…您的“系统”如何操作将车辆添加到
DataGridView
?如果它设置了网格
数据源
,则无需通过数据源“循环”。只需将“选定”行“强制转换”到
车辆
对象。
                            Vehicle vehicle = new Vehicle
                            {
                                Registration = registration,
                                Model = model,
                                Make = make,
                                Year = int.Parse(year),
                                Cost = int.Parse(cost)
                            };

                            Business.VehicleList.Add(vehicle);
        for (int i = 0; i < Business.VehicleList.Count; i++)
        {
            dataGridViewRegisteredVehicles.Rows.Add(
                Business.VehicleList[i].Registration,
                Business.VehicleList[i].Model,
                Business.VehicleList[i].Make,
                Business.VehicleList[i].Year,
                Business.VehicleList[i].Cost
                );
        }