如何访问 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
}
}
有点笼统的标题,但我不确定如何总结情况:
我有一个多行 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
}
}