首页 > 解决方案 > 在 datagridview 中选择行会清除所选对象中的列表

问题描述

这可能是在黑暗中拍摄,但我的代码中似乎有这个奇怪的错误。我有一个系统,它将一堆车辆对象(类称为 Vehicle)VehicleList存储在 Business 类中。这些车辆中的每一个都有一个称为活动的列表属性,它存储不同类型的Activities. 目前,我有一个系统,可以将车辆添加到 datagridview 中,我可以在其中选择一条记录,并打开一个表单,其中包含车辆活动列表,我可以在其中添加和删除它们等。这适用于将活动添加到列表中在当前选择的车辆中。我遇到的问题(可能是潜在问题)是,当我打开车辆列表表单并选择车辆以查看其活动列表时,它会从列表中删除所有记录。我进行了一些调试,发现活动一直存储在该车辆的列表中,直到我单击 datagridview 中的一行。

层次结构如下所示:

<Business> //Contains VehicleList
   <VehicleList> //Contains Vehicles
      <Vehicle> //Contains ActivityList 
         <ActivityList> //Contains Activities

这是我用来选择一行的方法:

    private void DataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.RowIndex != -1)
        {
            string registration = dataGridViewRegisteredVehicles.Rows[e.RowIndex].Cells[0].Value.ToString();

            foreach (Vehicle vehicle in Business.VehicleList)
            {
                if (vehicle.Registration == registration)
                {
                    _selectedVehicle = vehicle;
                }
            }
        }
        else
        {
            MessageBox.Show("This is not a record", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            return;
        }
    }

其中_selectedVehicle=

    private Vehicle _selectedVehicle;

    public Vehicle SelectedVehicle
    {
        get { return _selectedVehicle; }

        set
        {
            _selectedVehicle = value;
        }
    }

这是 Vehicle 类中的列表:

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

    public List<Activity> ActivityList
    {
        get => _activityList;
    }

我无法理解为什么单击记录时会清除列表。我在单击 datagridview 中的记录之前检查了列表,它显示了列表中活动数量的正确计数,但是当我之后检查列表时,列表计数为零。有没有人见过这个?

将车辆添加到车辆列表的方法:

                            Vehicle vehicle = new Vehicle
                            {
                                Registration = registration,
                                Model = model,
                                Make = make,
                                Year = int.Parse(year),
                                Cost = int.Parse(cost)
                            };

                            Business.VehicleList.Add(vehicle);

从列表添加到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
                );
        }

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

标签: c#listdatagridview

解决方案


推荐阅读