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

How to get current row of datagridview values when clicking on button?

我有一个视图模型,其中存储了我的数据以供演示者和 window 使用。但是,我现在需要(在按下按钮时)将网格上当前行的结果获取到我的视图模型中。我最开始使用的是鼠标双击事件,但是需求从那个变成了窗体上的一个按钮:

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)

不确定如何在没有 DataGridViewCellMouseEventArges 事件的情况下引用 RowIndex。我尝试了 CurrentRow 属性,但它不起作用。

只是另一个问题,如果有人也可以协助解决这个问题,我如何将值从一种形式获取到另一种形式,特别是属性值。它不在网格上,在控件中。基本上就是 public string order 而已。我在一个表单上设置值,然后需要它在另一个表单上进行查询过滤。如果您还需要什么,请告诉我。

您想使用 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}";

使用 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)
    {
       string selectedValue = dgvResults.SelectedRows[0].Cells["yourColumnName"].Value.ToString();
    }
}