• 13 odgovora
  • 5.532 pregleda
DataGridView kako da promenim boju polja? 25.07.2010. u 22:57 · pre 197 meseci #1
Kako da promenim bolju polja ili jos bolje celog reda u datagridview-u ako je vrednost nekog polja (integer je podatak) na primer veci od 100(broj)?
Re: DataGridView kako da promenim boju polja? 26.07.2010. u 14:02 · pre 197 meseci #2
Moras da hvatas CellFormatting dogadjaj datagridview-a.

U argumentima dogadjaja imas sve sto ti je potrebno (trenutni red i kolona, vrijednost trenutnog polja, i cellstyle objekat cijom promjenom mijenjas vizuelne karakteristike celije). CellFormatting se poziva za svaku celiju grida ponaosob.

Pozdrav.
Re: DataGridView kako da promenim boju polja? 26.07.2010. u 15:11 · pre 197 meseci #3
When binding the datagrid the procedure dgBoundItems is called

Code (csharp):

public void dgBoundItems(object sender, DataGridItemEventArgs e)
{
    foreach(TableCell cell in e.Item.Cells)
    {
        //e.Item.DataSetIndex = broj reda
        //e.Item.Cells.GetCellIndex(cell) = broj kolone ( ako posmatras samo 5 kolonu onda je ovje vrijednost 4 )

        if (e.Item.Cells.GetCellIndex(cell) == 4 && e.Item.DataSetIndex > 0)  // header=0 --  zato pisemo > 0
        {
            //Ako je vrijednost veca od 100 pocrveni to polje

            if (Convert.ToInt32(cell.Text.Trim()) > 100)
            {
                cell.BackColor = Color.Red;
            }
        }
    }
}
 


[Ovu poruku je menjao svemirski dana 26.07.2010. u 16:24 GMT+1]
Re: DataGridView kako da promenim boju polja? 26.07.2010. u 23:26 · pre 197 meseci #4
hvala puno skontao sam resenje...mislim da cu uspeti da prebacim u visual basic posto njega koristim
Hvala jos jednom!
Re: DataGridView kako da promenim boju polja? 27.07.2010. u 14:12 · pre 197 meseci #6
konvertovao sam kod, ovako izgleda:

Public Sub dgBoundItems(sender As Object, e As DataGridItemEventArgs)
For Each cell As TableCell In e.Item.Cells
'e.Item.DataSetIndex = broj reda
'e.Item.Cells.GetCellIndex(cell) = broj kolone ( ako posmatras samo 5 kolonu onda je ovje vrijednost 4 )

If e.Item.Cells.GetCellIndex(cell) = 4 AndAlso e.Item.DataSetIndex > 0 Then
' header=0 -- zato pisemo > 0
'Ako je vrijednost veca od 100 pocrveni to polje

If Convert.ToInt32(cell.Text.Trim()) > 100 Then
cell.BackColor = Color.Red
End If
End If
Next
End Sub

ali izbacuje mi gresku pre pogretanja programa podvlaci mi TableCell i e.Item.Cells u liniji za for petlju
Da li bi mogao da prepravis cod?


Re: DataGridView kako da promenim boju polja? 27.07.2010. u 20:42 · pre 197 meseci #7
Evo probaj ovako. Farba cijeli red :)

U -events- aktiviraj CellFormatting za svoj DataGridView
Code (csharp):

private void dgFormatiranje(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.RowIndex > -1 && e.ColumnIndex == dg.Columns["EmployeeID"].Index)
            {

                if (e.Value != null)
                {

                    int  xyz = Convert.ToInt16(e.Value);

                    if (xyz > 4 )
                    {

                        dg.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Pink;

                    }

                   
                }

            }
        }
 


Ovako izgleda:



Evo ti VB.Net kod:
Code (vbnet):

Private Sub dgFormatiranje(sender As Object, e As DataGridViewCellFormattingEventArgs)
     If e.RowIndex > -1 AndAlso e.ColumnIndex = dg.Columns("EmployeeID").Index Then

          If e.Value IsNot Nothing Then

               Dim xyz As Integer = Convert.ToInt16(e.Value)

               If xyz > 4 Then


                    dg.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Pink


               End If

          End If
     End If
End Sub

 




[Ovu poruku je menjao svemirski dana 27.07.2010. u 21:58 GMT+1]
Re: DataGridView kako da promenim boju polja? 11.08.2010. u 18:04 · pre 197 meseci #9
Evo sta pise na MSDN:

Citat:

When you handle the CellFormatting event, the ConvertEventArgs.Value property is initialized with the cell value. If you provide custom conversion from the cell value to the display value, set the ConvertEventArgs.Value property to the converted value, ensuring that the new value is of the type specified by the cell FormattedValueType property. To indicate that no further value formatting is necessary, set the DataGridViewCellFormattingEventArgs.FormattingApplied property to true.

Dakle, u prethodnom primeru e.Value je upravo vrednost polja koje se iscrtava.

Citat:

...i kako bas kad pretvoris u int dobijes da je to broj trenutnog reda

Ne dobije broj trenutnog reda kad ga pretvori u int, nego vrednost tog polja kad ga prevede u int16 tip:
Code (csharp):

int  xyz = Convert.ToInt16(e.Value);
 


Zatim proverava da li je ta vrednost veca od 4, i ako jeste farba ceo red u kojem se nalazi to polje u roze:
Code (csharp):

if (xyz > 4 )
{

   dg.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Pink;

}
 
Re: DataGridView kako da promenim boju polja? 11.08.2010. u 18:24 · pre 197 meseci #10
aha vrijednost polja,u ovom slucaju employeeID,ali mi nije jasno zasto bas tog polja,nigdje nije navedeno da uzima vrijednost tog polja,ili je?
Re: DataGridView kako da promenim boju polja? 11.08.2010. u 19:55 · pre 197 meseci #11
Citat:
negative7: ali mi nije jasno zasto bas tog polja,nigdje nije navedeno da uzima vrijednost tog polja,ili je?

Jeste, navedeno je, pogledaj prvi IF:
Code (csharp):

  if (e.RowIndex > -1 && e.ColumnIndex == dg.Columns["EmployeeID"].Index)
 


samo ako je indeks kolone tog polja isti kao indeks kolone "EmployeeID" (u prevodu: ako se to polje nalazi u koloni "EmloyeeID"), onda se radi sve ostalo, tj. iscrtavanje, bojenje...
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme