2012-03-12 7 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; 

    } 

それはコード「販売」の「検索」コードとCURRENT ROWで選択された行で行う必要がありそうです。 SELECTED.ROW = CURRENT.ROWを作成すると、それを解決できます。

答えて

1

行のみを選択していますが、セルは選択解除していません。

dataGridView1.CurrentRowは -

「を現在のセルを含む行を取得」と電流セルは、それが最初の行の最初のセルは=たもののままです。

は、選択された行をすべてクリアするために/細胞は、あなただけの行ではなく、セルを選択している

dataGridView1.ClearSelection() 

、代わりとして、現在

row.Selected = true; 

使用

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

の使用します。 私はあなたがbtnFind_Click(で行ったのと同じ方法が

))そうでなければ、あなたがbtnSold_Click(に関連するセルを検索したい場合があります

...このことができます願っています。

EDIT

完全なソリューションあなたのため

ます。private void 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; 

} 

私はSelectedRowsでcurrentRowのを単に置き換えてきました[ 0]と正常に動作します。

+0

ありがとうございました、選択した行= currenCellを作成しようとしていますが、どうすればそれになるでしょうか。 IveはdataGridView1.Currentcell = dataGridView1 [cbSuppList.Text、tbPartNum.Text]を試してみました。これは機能しません。名前(文字列)の代わりに列と行のインデックスが必要です。すみません、私はこれにかなり新しいです... – Rg786

+0

私は私の解決策を編集しました。下の "EDIT"を確認してください - あなたのために働くべきです。 –

+0

完璧です、ありがとうございました.....私は前にこの方法を試していましたが、[0]は含めませんでした。私は常に愚かな間違いから学ぶ。再びあなたに感謝.. – Rg786

関連する問題