首先定位,然后更改数据网格视图中选定行中单元格的值

本文关键字:视图 单元格 网格 数据网 定位 然后 数据 | 更新日期: 2023-09-27 18:27:25

我想知道如何更改数据网格视图中所选行中特定单元格的值。我可以更改值,但不能更改高亮显示的行,只能更改第一行。该行的hghlights在"查找"按钮代码中定义。

例如:我输入一个文本,它在每一行中搜索特定列中的文本,然后滚动到并高亮显示/选择整行。(这很好)

然后,我希望能够通过选择下拉列表(combobox)中已经存在的列名来获得高亮显示行的特定单元格的值。然后,它获取该单元格的值,并从中减去数值UpDownCounter(nudQTY)中的值。

到目前为止,我可以对列名(cbSupplList)选择的不同单元格执行此操作,但它只对第一行执行,而不是对"查找"按钮"代码"定义的高亮显示的行执行此操作。

以下是我迄今为止的尝试:

 private void btnFind_Click(object sender, EventArgs e)
    {
        /* Code to search the alphanumneric Part Number (in Column1 header called "PART NUMBER") 
           and highlihgt the row*/
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            // Removes the row selection
            row.Selected = false;
            var cellValue = row.Cells["PART NUMBER"].Value;
            if (cellValue != null && cellValue.ToString() == tbPartNum.Text.ToUpper())
                {
                    // Scrolls the found row up and highlights the entire row
                    row.Selected = true;
                    dataGridView1.FirstDisplayedScrollingRowIndex = row.Index;
                }
        }
    }
    private void btnSold_Click(object sender, EventArgs e)
    {
        int cellVal;
        int newCellVal;
        cellVal = Convert.ToInt32(dataGridView1.CurrentRow.Cells[cbSuppList.Text.ToString()].Value);
        newCellVal = Convert.ToInt32(cellVal - nudQty.Value);
        dataGridView1.CurrentRow.Cells[cbSuppList.Text.ToString()].Value = newCellVal;
    }

这似乎与"Find"代码中的SELECTED ROW和"Sold"代码中"CURRENT ROW"有关。制作SELECTED.ROW=CURRENT.ROW可以解决问题……有什么想法吗?

首先定位,然后更改数据网格视图中选定行中单元格的值

您只取消选择"行"而不选择"单元格"。

dataGridView1.CurrentRow-"获取包含当前单元格的行"

当前单元格保持原样=第一行的第一个单元格。

为了清除所有选定的行/单元格,请使用

dataGridView1.ClearSelection()

而不是

row.Selected = true;

使用

row.Cells["PART NUMBER"].Selected = true;

当前您只选择行,而不选择单元格。我希望这能帮助。。。

否则,您可能希望在btnSold_Click()中查找相关单元格,方法与在btnFind_Click)中查找相同

编辑

的完整解决方案

private void btnSold_Click(对象发送方,EventArgs e){

    int cellVal;
    int newCellVal;
    cellVal = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[cbSuppList.Text.ToString()].Value);
    newCellVal = Convert.ToInt32(cellVal - nudQty.Value);
    dataGridView1.SelectedRows[0].Cells[cbSuppList.Text.ToString()].Value = newCellVal;
}

我刚刚用SelectedRows[0]替换了CurrentRow,效果很好。