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)?
DataGridView kako da promenim boju polja?
Zaključano
Zakačeno
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.
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.
izmenjeno 1 put, poslednji put svemirski 26.07.2010. u 16:24
Izmene poruke
- svemirski26.07.2010. u 16:24zapis iz teksta poruke
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;
}
}
}
}
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;
}
}
}
}
hvala puno skontao sam resenje...mislim da cu uspeti da prebacim u visual basic posto njega koristim
Hvala jos jednom!
Hvala jos jednom!
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?
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?
izmenjeno 1 put, poslednji put svemirski 27.07.2010. u 21:58
Izmene poruke
- svemirski27.07.2010. u 21:58zapis iz teksta poruke
Evo probaj ovako. Farba cijeli red :)
U -events- aktiviraj CellFormatting za svoj DataGridView
Ovako izgleda:

Evo ti VB.Net kod:
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;
}
}
}
}
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
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
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
Evo sta pise na MSDN:
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.
...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:
Zatim proverava da li je ta vrednost veca od 4, i ako jeste farba ceo red u kojem se nalazi to polje u roze:
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);
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;
}
if (xyz > 4 )
{
dg.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Pink;
}
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?
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)
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...
razumio sa hvala,jos samo jedno pitanje,zasto ova provjera da e.rowindex > -1,ta zar moze bit negativna
Citat:
negative7: zasto ova provjera da e.rowindex > -1,ta zar moze bit negativna
Zaglavlje (header, ovo sa nazivima kolona) ima indeks -1.
sad je stvarno dosta toga mi jasnije,hvala puno