[ 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)? |
[ Nesho82 @ 25.07.2010. 22:57 ] @
[ 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 ] @
[ 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
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|