Jag vill kunna välja bakgrundsfärg på en rad i en Datalist baserat på en jämförelse mellan två kolumner som finns i det dataset som binds till kontrollen. prova att göra det i OnItemCreated istället ... Detta funkade inte heller. Det fungerar på en DataGrid Det fungerar på en DataGrid Gjort processen kort och tagit bort DataListen och ersatt med en DataGrid. Hade ett liknande problem fast med en repeater som jag löste på följande sätt:Välja färg på rad i Datalist, baserat på värd
På MS finns följande kod som jag inte har lyckats få att fungera, jag får felmeddelande redan på den första raden. (Verkar som om det inte finns någon DataRowView.
<code>
Private Sub DataList1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs) Handles DataList1.ItemDataBound
Dim drv As DataRowView = CType(e.Item.DataItem, DataRowView)
Dim quantity As Integer = _
Integer.Parse(drv.Row("Quantity").ToString())
If (quantity < 10) Then
e.Item.BackColor = Color.Red
End If
End Sub
</code>
Nån som har nån liten kodsnutt där detta fungerar?Sv: Välja färg på rad i Datalist, baserat på v
Sv: Välja färg på rad i Datalist, baserat på v
Det verkar vara svårt att få tag i ett värde ur en datalistas kolumner när datalisten skapas, det borde gå.
Det skall gå att göra med en datagrid, men jag tycker att den har kanske mer "overhead" än vad en DataList har.
(Dessutom vil jag ha kvar datalisten eftersom jag har ett flertal andra sidor som använder denna kontrollen redan..)Sv: Välja färg på rad i Datalist, baserat på v
<code>
Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound
Dim objItem As ListItemType = CType(e.Item.ItemType, ListItemType)
If objItem = ListItemType.Item Or objItem = ListItemType.AlternatingItem Then
If CType(e.Item.Cells(2).Text, Integer) < CType(e.Item.Cells(3).Text, Integer) Then
e.Item.BackColor = Color.Red
End If
End If
End Sub
</code>
Kör jag samma kod i DataListen finns ingen property som heter Cells (e.Item.Cells) för Datalisten, finns det någon annan property som gör att jag kan "manipulera" värdena som skall fylla DataListen, innan jag visar värdena, precis som det går att göra med DataGriden.Sv: Välja färg på rad i Datalist, baserat på v
<code>
Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound
Dim objItem As ListItemType = CType(e.Item.ItemType, ListItemType)
If objItem = ListItemType.Item Or objItem = ListItemType.AlternatingItem Then
If CType(e.Item.Cells(2).Text, Integer) < CType(e.Item.Cells(3).Text, Integer) Then
e.Item.BackColor = Color.Red
End If
End If
End Sub
</code>
Kör jag samma kod i DataListen finns ingen property som heter Cells (e.Item.Cells) för Datalisten, finns det någon annan property som gör att jag kan "manipulera" värdena som skall fylla DataListen, innan jag visar värdena, precis som det går att göra med DataGriden.Sv: Välja färg på rad i Datalist, baserat på v
Är mer resurskrävande men det fungerar, kommer ändå inte att ligga på trafiktäta sidor.
Skulle nån hitta nån lösning för problemet så att DataList kan användas vore det tacksamt.Sv: Välja färg på rad i Datalist, baserat på v
Använde en Helper Function som ser ut enligt nedan i codebehind:
<code>
Protected Function returnQuantity(ByVal Quantity As Object) As String
Dim output As String
If Quantity < 10 Then
output = "<tr><td width='300' bgcolor='FF0000'>" & Quantity & "</td></tr>"
End If
Return output
End Function
</code>
Koden ser ut så här på aspx-sidan i repeatern/datalisten:
<code>
<%# returnQuantity(Container.DataItem("Quantity"))%>
</code>
Hoppas detta kan vara till hjälp
jalle