【问题标题】:How to get current row of datagridview values when clicking on button?单击按钮时如何获取当前行的datagridview值?
【发布时间】:2018-01-18 13:02:55
【问题描述】:

我有一个视图模型,其中存储了我的数据以在演示者和窗口上使用。但是,我现在需要(按下按钮时)将网格上当前行的结果放入我的视图模型中。我第一次使用鼠标双击事件,但是需求从那个变成了表单上的一个按钮:

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

【问题讨论】:

    标签: c# winforms button datagridview rowdatabound


    【解决方案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}";
    

    【讨论】:

    • 关于将属性值从一个类传递到另一个类的任何想法?
    • 如果您有一个表单实例,那么它将是 instancename.dgvResults(如果还没有,您可能需要将 dgvResults 的修饰符更改为 public)。
    • 我对此有意见。 SelectionMode 设置为 RowHeaderSelect,我不允许更改,以保持应用程序一致。所以从技术上讲,没有选定的行。
    【解决方案2】:

    使用 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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多