首页 > 解决方案 > 如何通过更改 datagridview 选定索引行中的值来更新列表?

问题描述

我在一个名为车辆的类中有一个列表。这包含它自己的列表,称为活动,其中包含也是类的不同活动的实例。当我将活动添加到特定车辆活动列表时,它会添加该活动的新实例并刷新 datagridview 以显示活动列表。我想做的是单击 datagridview 中的一行并填充一些文本框,然后有一个按钮来更新列表中的活动对象。

这就是我检索列表的方式:

private Vehicle _activeVehicle; //Where _activeVehicle is set prior as a specific instance of a vehicle

var list = _activeVehicle.ActivityList;

这是添加到活动列表中的我的活动的类:

public class Relocate : Activity
{
    private string _distance;
    private string _type;
    private string _name;
    private string _cost;
    private DateTime _date;
    private string _start;

    public string Type { get => _type; set => _type = value; }

    public string Name { get => _name; set => _name = value; }

    public string Cost { get => _cost; set => _cost = value; }

    public DateTime Date { get => _date; set => _date = value; }

    public string Distance { get => _distance; set => _distance = value; }

    public string Start { get => _start; set => _start = value; }
}

当单击 datagridview 中的项目时,我有一个行单击方法,该方法将该行中每个单元格的值添加到一些文本框中。目前我直接获取如下所示的值,但理想情况下,我想从列表中选择实际对象来填充文本框,但我不确定如何根据 datagridview 单元格单击来执行此操作。这是我的做法:

DataGridView table = relocationDataGridView;
                    table.ClearSelection();
                    DataGridView.HitTestInfo index = table.HitTest(e.X, e.Y);
                    table.Rows[index.RowIndex].Selected = true;
                    IndexRelocate = index.RowIndex;
                    DataGridViewRow dataGrid = table.Rows[index.RowIndex];

                    switch (index.RowIndex)
                    {
                        case -1:
                            {
                                MessageBox.Show("This is not a record", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                return;
                            }
                        default:
                            {
                                relocationCostTextBox.Text = dataGrid.Cells[0].Value.ToString();
                                relocationStartTextBox.Text = dataGrid.Cells[1].Value.ToString();
                                relocationTypeTextBox.Text = dataGrid.Cells[2].Value.ToString();
                                relocationEndTextBox.Text = dataGrid.Cells[3].Value.ToString();
                                relocationDistanceTextBox.Text = dataGrid.Cells[4].Value.ToString();
                                relocationDateTimePicker.Value = (DateTime)dataGrid.Cells[5].Value;
                                break;
                            }
                    }

重定位是datagridview中的activity,其中class的属性为Cost, Start, Type, End, Distance, Date

我想做的是更新列表中的特定对象,_activeVehicle通过单击datagridview,在文本框中输入新的详细信息,然后单击更新按钮来更新列表所属的对象,但我不确定从哪里开始编写代码这个。下面的代码使用所选行的当前详细信息填充文本框,但如果它使用该行作为参考并从属于的列表中提取数据会更好_activeVehicle。我怎样才能做到这一点?

标签: c#listdatagridview

解决方案


推荐阅读