2012-11-14 86 views
7

Ho bisogno di cambiare il colore di una riga in datagridview ma il mio codice non funziona per me. ottengo sempre un errore che dice "colonna denominata Quantità: non può essere trovato Nome di parametro:. ColumnName"Modifica il colore della riga in DataGridView in base alla quantità di un valore di cella

Ecco il mio codice:

Private Sub DataGridView1_CellFormatting(ByVal sender As Object, ByVal e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting 
    For i As Integer = 0 To Me.DataGridView1.Rows.Count - 1 
     If Me.DataGridView1.Rows(i).Cells("Quantity:").Value < 5 Then 
      Me.DataGridView1.Rows(i).Cells("Quantity:").Style.ForeColor = Color.Red 
     End If 
    Next 
End Sub 

Ti prego, aiutami a risolvere il problema. Grazie.

+0

Utilizzare il collegamento sottoindicato per il confronto della data di scadenza http://stackoverflow.com/a/29486288/3583859 –

risposta

2

ho fissato il mio errore appena rimosso. "Valore" da questa linea:

If drv.Item("Quantity").Value < 5 Then 

Così sarà simile

If drv.Item("Quantity") < 5 Then

+0

Scusa, sono in viaggio. Quindi non posso aiutarti di più adesso.Spero che la tua soluzione risolva il tuo problema – Nianios

1

Prova questo (nota: non ho in questo momento di Visual Studio, quindi il codice è copia incolla dal mio archivio (non l'ho testarlo):

Private Sub DataGridView1_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting 
    Dim drv As DataRowView 
    If e.RowIndex >= 0 Then 
     If e.RowIndex <= ds.Tables("Products").Rows.Count - 1 Then 
      drv = ds.Tables("Products").DefaultView.Item(e.RowIndex) 
      Dim c As Color 
      If drv.Item("Quantity").Value < 5 Then 
       c = Color.LightBlue 
      Else 
       c = Color.Pink 
      End If 
      e.CellStyle.BackColor = c 
     End If 
    End If 
End Sub 
+0

Grazie mille per la risposta, ma ho alcune domande sulla tua risposta :) Mostra questo errore: Riferimento oggetto non impostato su un'istanza di un oggetto. e si riferisce a "Prodotti"? è il nome dell'origine dati? –

+0

ds.Tables ("Prodotti") è la tabella che si riempie la vista dati. Quindi metti il ​​nome del tuo tavolo lì – Nianios

+0

Thankyou HaBouF. Che ne dici dell'errore che sto ottenendo? come posso ripararlo? –

11

Questo potrebbe essere utile

  1. utilizzare l'evento "RowPostPaint"
  2. Il nome della colonna non è il "Header" della colonna. Devi andare alle proprietà per DataGridView => quindi selezionare la colonna => quindi cercare la proprietà "Name"

ho convertito questo da C# ('From: http://www.dotnetpools.com/Article/ArticleDetiail/?articleId=74)

Private Sub dgv_EmployeeTraining_RowPostPaint(sender As Object, e As System.Windows.Forms.DataGridViewRowPostPaintEventArgs) 
    Handles dgv_EmployeeTraining.RowPostPaint 

    If e.RowIndex < Me.dgv_EmployeeTraining.RowCount - 1 Then 
     Dim dgvRow As DataGridViewRow = Me.dgv_EmployeeTraining.Rows(e.RowIndex) 

    '<== This is the header Name 
     'If CInt(dgvRow.Cells("EmployeeStatus_Training_e26").Value) <> 2 Then 


    '<== But this is the name assigned to it in the properties of the control 
     If CInt(dgvRow.Cells("DataGridViewTextBoxColumn15").Value.ToString) <> 2 Then 

      dgvRow.DefaultCellStyle.BackColor = Color.FromArgb(236, 236, 255) 

     Else 
      dgvRow.DefaultCellStyle.BackColor = Color.LightPink 

     End If 

    End If 

End Sub 
0
If drv.Item("Quantity").Value < 5 Then 

uso questo come questo

If Cint(drv.Item("Quantity").Value) < 5 Then 
1

è sufficiente rimuovere la : nel vostro Quantity. Assicurati che il tuo attributo è lo stesso con il parametro di includere nel codice, in questo modo:

Private Sub DataGridView1_CellFormatting(ByVal sender As Object, ByVal e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting 
    For i As Integer = 0 To Me.DataGridView1.Rows.Count - 1 
     If Me.DataGridView1.Rows(i).Cells("Quantity").Value < 5 Then 
      Me.DataGridView1.Rows(i).Cells("Quantity").Style.ForeColor = Color.Red 
     End If 
    Next 
End Sub 
0

Utilizzando l'evento CellFormating e la e argomento:

If CInt(e.Value) < 5 Then e.CellStyle.ForeColor = Color.Red

0
Dim dgv As DataGridView = Me.TblCalendarDataGridView 

For i As Integer = 0 To dgv.Rows.Count - 1 
    For ColNo As Integer = 4 To 7 
     If Not dgv.Rows(i).Cells(ColNo).Value Is DBNull.Value Then 

      dgv.Rows(i).Cells(ColNo).Style.BackColor = vbcolor.blue 
     End If 
    Next 
Next 
+0

Per favore aggiungi la spiegazione della tua risposta – STF

Problemi correlati