我有一个视图模型,其中存储了要在presenter和窗口中使用的数据。但是,我现在需要(在按下按钮时)将网格上当前行的结果放入我的视图模型中。我最初使用的是鼠标双击事件,但要求从该事件更改为表单上的一个按钮:
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而已。我在一个表单上设置值,然后在另一个表单上使用它进行查询过滤。如果你还需要什么,请告诉我。
发布于 2018-01-18 21:12:34
您希望使用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}";发布于 2019-09-13 11:39:24
使用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();
}
}https://stackoverflow.com/questions/48322047
复制相似问题