сначала найти, а затем изменить значение ячейки в выбранной строке в сетке данных? - PullRequest
0 голосов
/ 12 марта 2012

Я пытаюсь выяснить, как я могу изменить значение определенной ячейки в выбранной строке сетки данных.Я могу изменить значение, но не в выделенной строке, только в первой.Подсветка строки определяется в коде кнопки «найти».

Например: я ввожу текст, он ищет в каждой строке этот текст в определенном столбце, а затем прокручивает и выделяет / выделяет весь текст.строка.(Это работает отлично)

Затем я хочу иметь возможность получить значение определенной ячейки выделенной строки, выбрав имя столбца, уже присутствующее в раскрывающемся списке (выпадающий список).Затем он получает значение этой ячейки и вычитает из него значение, присутствующее в numericUpDownCounter (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;

    }

Возможно, это связано с ВЫБРАННОЙ СТРОКОЙв коде «Поиск» и ТЕКУЩЕЙ СТРОКЕ в коде «Продано».Создание SELECTED.ROW = CURRENT.ROW решит это ... любые идеи?

1 Ответ

1 голос
/ 12 марта 2012

Вы отменяете выбор только строк, но не ячеек.

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;

}

Я только что заменил CurrentRow на SelectedRows [0] и работает нормально.

...