2012-03-12 62 views
0

我試圖找出如何可以更改datagridview選定行中特定單元格的值。我能夠更改值,但不是突出顯示的行中,只有第一個。該行的高亮度在「查找」按鈕代碼中定義。首先定位,然後更改datagridview中選定行中單元格的值?

例如:我輸入一個文本,它會在特定列中的每一行中搜索該文本,然後滾動並突出顯示/選擇整行。 (這工作正常)

然後我希望能夠通過選擇列名已經出現在下拉列表(組合框),以獲得突出顯示的行的特定單元格的值。然後它獲取該單元格的值,並從中扣除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

你只取消行,但沒有細胞。

dataGridView1.CurrentRow - 「獲取包含當前單元格的行」

而且當前單元格仍然是什麼東西=第一行的第一個單元格。

爲了清除所有選中的行/電池使用

dataGridView1.ClearSelection() 

代替

row.Selected = true; 

使用

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

由於目前而你只選擇行而不是細胞。 我希望這有助於...

否則,你可能希望找到相關細胞在btnSold_Click()btnFind_Click()

一樣的工作方式。

編輯

完整的解決方案,你

私人無效btnSold_Click(對象發件人,EventArgs的){

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; 

} 

我剛剛更換CurrentRowSelectedRows [ 0],工作正常。

+0

謝謝,即時嘗試使選定的行= currenCell,我將如何去做。我曾嘗試dataGridView1.Currentcell = dataGridView1 [cbSuppList.Text,tbPartNum.Text] ...這不起作用,它似乎希望列和行索引,而不是名稱(字符串)的int。我很抱歉,我對此很新... – Rg786 2012-03-12 15:12:01

+0

我編輯了我的解決方案。請檢查下面的內容「編輯」 - 應該爲你工作。 – 2012-03-12 17:22:43

+0

完美,謝謝.....事情是我曾嘗試過這種方法,但沒有包括[0]。我總是從愚蠢的錯誤中學習。再一次感謝你.. – Rg786 2012-03-12 19:24:08

相關問題