单击按钮时如何获取当前行的datagridview值?

时间:2018-01-18 13:02:56

标签: c# winforms button datagridview rowdatabound

我有一个视图模型,其中存储了我的数据,以便在演示者和窗口中使用。但是,我现在需要获取(当按下按钮时)网格上当前行的结果到我的视图模型中。我首先使用了鼠标双击事件,但是需求从表单更改为表单上的按钮:

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。我在一个表单上设置了值,然后需要它在另一个表单上进行查询过滤。如果您还有其他需要,请告诉我。

2 个答案:

答案 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();
    }
}