我有一个视图模型,其中存储了我的数据,以便在演示者和窗口中使用。但是,我现在需要获取(当按下按钮时)网格上当前行的结果到我的视图模型中。我首先使用了鼠标双击事件,但是需求从表单更改为表单上的按钮:
private void dgvResults_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (this.colOrderNo.Index != e.ColumnIndex || e.RowIndex < 0) return;
var auditOrder = (PurchaseOrdersTrackingViewModel) this.dgvResults.Rows[e.RowIndex].DataBoundItem;
this.AuditOrderKey = $"{auditOrder.OrderNo}|{auditOrder.ItemNo}|{auditOrder.WarehouseId}|{auditOrder.ItemSequence}";
}
这是我的旧代码。现在我需要这个:
private void btnAuditLog_Click(object sender, EventArgs e)
不确定如何在没有RowIndex
事件的情况下引用DataGridViewCellMouseEventArges
。我尝试了CurrentRow
属性,但它没有完成这项工作。
另一个问题是,如果有人可以提供帮助,我如何从一种形式获得一个值,特别是一个属性值。它不在电网中,在控制中。它基本上只是public string order
。我在一个表单上设置了值,然后需要它在另一个表单上进行查询过滤。如果您还有其他需要,请告诉我。
答案 0 :(得分:1)
您想要使用DataGridView的SelectedRows属性。它告诉选择哪一行。在这种情况下,您似乎想要第一个选定的行(因为您有一个名为this.AuditOrderKey的属性)。
在此上下文中,列顺序不再重要。
if (dgvResults.SelectedRows.Count == 0) return;
var auditOrder = (PurchaseOrdersTrackingViewModel) dgvResults.SelectedRows[0].DataBoundItem;
this.AuditOrderKey = $"{auditOrder.OrderNo}|{auditOrder.ItemNo}|{auditOrder.WarehouseId}|{auditOrder.ItemSequence}";
如果您没有选择行,则CurrentRow是一个选项:
if (dgvResults.CurrentRow == null) return;
var auditOrder = (PurchaseOrdersTrackingViewModel) dgvResults.CurrentRow.DataBoundItem;
this.AuditOrderKey = $"{auditOrder.OrderNo}|{auditOrder.ItemNo}|{auditOrder.WarehouseId}|{auditOrder.ItemSequence}";
答案 1 :(得分:0)
使用DataGridView的SelectedRows属性。假设您将DataGridView设置为MultiSelect = false;和SelectionMode = FullRowSelect;
if (dgvResults.SelectedRows.Count > 0)
{
dgvResults.SelectedRows[0].Cells["yourColumnName"].Value.ToString();
}
在您的按钮单击事件中,它将看起来像这样。 (假设您的按钮名为btnEdit)
private void btnEdit_Click(object sender, EventArgs e)
{
if (dgvResults.SelectedRows.Count > 0)
{
dgvResults.SelectedRows[0].Cells["yourColumnName"].Value.ToString();
}
}