如何访问 DataGridView 数据

How to access DataGridView data

有点笼统的标题,但我不确定如何总结情况:

我有一个多行 6 列的 DGV。在这个 DGV 的表单上,我有几个按钮可以添加、编辑、删除和保存 DGV 的状态(图 1)。当用户单击“编辑”按钮时,将打开一个新的 window,其中包含文本框,其中应填充所选行中的数据(图 2)。

我的问题是,传递行数据的最佳方法是什么(通过 DataGridViewRow 或 DataGridViewCellCollection),一旦它被传递到编辑 class,我如何访问行数据。一旦我收到这个,剩下的对我来说应该是小菜一碟,但我不确定如何访问细胞的数据。

代码贴在图片下方。

图 1:

图 2:(不知道为什么这么大,抱歉!)

代码片段:

这是 DGV 的“编辑轨道车”按钮的代码:

private void buttonEditRailCar_Click(object sender, EventArgs e)
    {
        var singleCarSelected = this.dataGridViewSimulatedTrainEditor.CurrentRow;

        EditRailCar editNewRailCar = new EditRailCar(singleCarSelected);

        //To Whosebug: Feel free to ignore anything below this comment!

        var result = editNewRailCar.ShowDialog();

        if (result == DialogResult.OK)
        {                
            this.NewSimulatedTrain.Add(addNewRailCar.NewSimulatedTrain);
            this.WereChangesMade = true;
            this.buttonSaveXML.Enabled = true;
        }
    }

这是编辑轨道车 FORM 的代码,它会弹出文本框,我将用行中的数据填充 - 我添加了一些伪代码,这样你就可以看到我想要实现的目标:

public partial class EditRailCar : Form
{
    public EditRailCar(DataGridViewRow t)
    {
        InitializeComponent();

        //Here, when the form opens, the local textboxes should be populated with data
            //from the DGV's cells
        this.textBoxName.Text = t.RailCarName;
        this.textBoxRailCarType.Text = t.RailCarType;
        this.textBoxVelocity.Text = t.Velocity;
        this.textBoxVelocityDistance.Text = t.VelocityDistance;
        this.textBoxIsDamaged.Text = t.IsDamage;
        this.textBoxIsForeignObject.Text = t.IsForeignObject;
    }

    private void buttonSaveEdits_Click(object sender, EventArgs e)
    {
        //This will save the changes to the current row in the DGV
        //Whosebug may ignore this :)
    }

    private void buttonCancelNewCar_Click(object sender, EventArgs e)
    {
        DialogResult = DialogResult.Cancel;
    }
}

首先,使用SelectedRows 属性代替datagridview的CurrentRow like

if (this.dataGridViewSimulatedTrainEditor.SelectedRows.Count > 0)
{
    var singleCarSelected = this.dataGridViewSimulatedTrainEditor.SelectedRows[0];
}

再说一遍,你的超车方式完全错误。而是创建一个 RetailCar 类型,填充它并像

一样传递它
public class RetailCar
{
  public string Name {get; set;}
  public string Type {get; set;}

  // rest propetties
}

DataGridViewRow rw = this.dataGridViewSimulatedTrainEditor.SelectedRows[0];
RetailCar rc = new RetailCar
{
  Name = rw.Cells["RetailCar Name"].Value.ToString();
  Type = rw.Cells["RetailCar Type"].Value.ToString();

  // fill rest properties
};

传下去

EditRailCar editNewRailCar = new EditRailCar(rc);

相应地更改表单构造函数

public partial class EditRailCar : Form
{
    public EditRailCar(RetailCar retailCar)
    { 
        // do whatever needed
    }
}