2011-05-02 17 views
5
private void dgv_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
    { 
     int MaxRows = dgv.Rows.Count; 

     for (int i = 0; i < MaxRows-1; i++) 
     {     
      SqlDataAdapter da = new SqlDataAdapter("SELECT CAST(originalPrice * " + (1.00 + (float.Parse(txtMarkUp.Text)/100.00)).ToString() + " * " + (1.00 + (float.Parse(dgv.Rows[i].Cells[4].Value.ToString())/100.00)).ToString() + " AS decimal (8,2)) AS sellingPrice FROM Warehouse WHERE barcode = '" + Convert.ToString(dgv.Rows[i].Cells[2].Value) + "'", conn); 
      DataTable dt = new DataTable(); 
      da.Fill(dt); 

      DataGridViewComboBoxColumn sellingPrice = dgv.Columns["sellingPrice"] as DataGridViewComboBoxColumn; 

      sellingPrice.DataSource = dt; 
      sellingPrice.ValueMember = "sellingPrice"; 
      sellingPrice.DisplayMember = "sellingPrice"; 

      dgv.Rows[i].Cells[5].Value = dt.Rows[0].ItemArray.GetValue(0); 
      dgv.Rows[i].Cells[4].Value = dt.Rows[0].ItemArray.GetValue(2).ToString(); //percent of tax for that category of product 
     } 
    } 

Questo codice funziona perfettamente ma solo per un valore in una casella combinata ... Ho bisogno di valori diversi in righe diverse per la casella combinata. Come lo posso fare? Nell'esempio quando nella colonna 2 il prodotto è cambiato, ho bisogno di cambiare i valori della colonna 5 che è combobox con i prezzi di vendita. Qualsiasi aiuto sarebbe apprezzato, non ho quasi nessuna soluzione per questo nella mia mente. Grazie.Diversi valori ComboBox in DataGridView in diverse righe

risposta

7

io non sono sicuro di quello che si desidera partendo dal presupposto che si desidera associare valori diversi fila saggio per la colonna combobox In tal caso, se è possibile determinare la condizione di riga sapiente uso questo

(dgv.Rows[i].Cells[5] as DataGridViewComboBoxCell).DataSource = dt; 
(dgv.Rows[i].Cells[5] as DataGridViewComboBoxCell).ValueMember = "sellingPrice"; 
(dgv.Rows[i].Cells[5] as DataGridViewComboBoxCell).DisplayMember = "sellingPrice"; 

Questo imposterà la DataSource per quella particolare cella invece della Colonna che stai attualmente facendo.

Spero che questo aiuti.

+0

Sì, questo è quello che voglio, e quello che ho scambiato .. grazie mille per avermi dato la direzione. p.s. Questo mi dà ancora un errore, forse perché datamember e valuemember non sono impostati. Come posso impostarli su quella cella? – dex

+0

Il valore DataGridViewComboBoxCell non è valido. – dex

+0

Modificato per l'impostazione dei membri. – V4Vendetta

0

Penso che dovresti gestire l'evento CellParsing di tua vista datagrid e quando la cella del prodotto viene modificata e l'utente naviga in un'altra cella, compila la casella combinata con i risultati desiderati.

+0

CellEndEdit è quasi lo stesso, quindi penso che non farà una grande differenza, in ogni caso grazie per la risposta. – dex

+0

È possibile utilizzare il valore e.value dall'evento 'cellparsing' per scoprire quale prodotto è stato selezionato ed eseguire la richiesta db in base ad esso e quindi associare la casella combinata di tale riga al risultato appena recuperato. Non posso testarlo ora, ma penso che dovrebbe funzionare. – Kamyar

Problemi correlati