[ Nesho82 @ 25.07.2010. 22:57 ] @
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)?
[ Mikelly @ 26.07.2010. 14:02 ] @
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.
[ svemirski @ 26.07.2010. 15:11 ] @
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]
[ Nesho82 @ 26.07.2010. 23:26 ] @
hvala puno skontao sam resenje...mislim da cu uspeti da prebacim u visual basic posto njega koristim
Hvala jos jednom!
[ svemirski @ 27.07.2010. 00:37 ] @
Za automatsku konverziju koristi:

http://www.developerfusion.com/tools/convert/csharp-to-vb/
[ Nesho82 @ 27.07.2010. 14:12 ] @
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?


[ svemirski @ 27.07.2010. 20:42 ] @
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]
[ negative7 @ 11.08.2010. 17:47 ] @
jel mozes pojasnit kako radi ovo e.value, sta vraca i kako,i kako bas kad pretvoris u int dobijes da je to broj trenutnog reda
[ bojan21 @ 11.08.2010. 18:04 ] @
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;

}
 
[ negative7 @ 11.08.2010. 18:24 ] @
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?
[ bojan21 @ 11.08.2010. 19:55 ] @
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...
[ negative7 @ 12.08.2010. 09:33 ] @
razumio sa hvala,jos samo jedno pitanje,zasto ova provjera da e.rowindex > -1,ta zar moze bit negativna
[ bojan21 @ 12.08.2010. 10:23 ] @
Citat:
negative7: zasto ova provjera da e.rowindex > -1,ta zar moze bit negativna


Zaglavlje (header, ovo sa nazivima kolona) ima indeks -1.
[ negative7 @ 12.08.2010. 12:27 ] @
sad je stvarno dosta toga mi jasnije,hvala puno