Jag har fått ett redan skapat projekt i handen där en gridd byggs upp genom kolumner i kodläge typ: Hej Stefan. Tack Jonas :) Det där ser ut att fungera, ska testa detta!Hur kan jag behandla olika rader och dess utssende när jag fyller DataGridden.
DataGrid.Columns.Add(CreateBoundColumn("Priority1", "Prio", "", 15));
DataGrid.Columns.Add(CreateBoundColumn("Priority2", "Prio", "", 17));
DataGrid.Columns.Add(CreateImageColumn("Images/Icons/View.gif", "View", null, "View", 16));
DataGrid.Columns.Add(CreateImageColumn("Images/Icons/Edit.gif", "Edit", null, "Edit", 16));
DataGrid.Columns.Add(CreateImageColumn("Images/Icons/Delete.gif", "Delete", null, "Delete", 16));
DataGrid.Datasource = dataview;
DataGrid.DataBind();
Varje rad som jag populerar datagidden med har ett värde som är 1 och 0.
0: anger att ändast view rätthighet är tillhåtet och ska inte visa upp bilderna i Delete och Edit.
1: anger full skriv och läsreättighet och visar alla bilderna.
Jag vill nu kunna kolla varje rad och avgöra om bilderna ska visas baserat på om värdet för raden är 1 eller 0.
Jag har inga "bundna kolumner" angivna i datagridens designläge och har därmed ingen asp angivelser för kolumnerna i .aspx sidan utan all denna logik ska
hanteras i CodeBehind. önskemålet är alltså att icke blanda i vilkorssatser i .aspx sidan i asp koden.
Är dett möjligt?, jag har provat olika ideer med ItemDataBound event och ItemCreated event men det smäller hela tiden när jag
ska föröker påverka bildkolumnerna i DataGridden.Sv: Hur kan jag behandla olika rader och dess utssende när jag fyller DataGridde
Jag har haft ett liknande problem och detta löste jag med hjälp av en TemplateColumn samt en klass för min datatyp, i ditt fall din Image.
Klassen skulle se ut nåt sånt här i ditt fall
Class myImageColumn
Implements ITemplate
Sub instantiateIn(ByVal container As Control) Implements ITemplate.InstantiateIn
Dim myImage As System.Web.UI.WebControls.Image = New System.Web.UI.WebControls.Image
myImage.ImageUrl = "..."
AddHandler myImage.DataBinding, AddressOf BindImageColumn
container.Controls.Add(myImage)
End Sub
Public Sub BindImageColumn(ByVal sender As Object, ByVal e As EventArgs)
Dim myImage As System.Web.UI.WebControls.Image = CType(sender, System.Web.UI.WebControls.Image)
Dim container As DataGridItem = CType(myImage.NamingContainer, DataGridItem)
myImage.Visible = Convert.ToBoolean(DataBinder.Eval((CType(container, DataGridItem)).DataItem, "IsVisible"))
End Sub
End Class
Här antar jag att IsVisible är ditt boolska värde om bilden skall visas eller ej. Du kan göra mer raffinerade saker än att gömma bilden, men jag tror att principen är tillräckligt tydlig. Sen om det här är bästa sättet vet jag inte, men det löste biffen för mig iaf.
Sen får du givetvis fixa lite i din kolumntilldelning (CreateImageColumn).
Dim colImage As New TemplateColumn
colImage.ItemTemplate = New myImageColumn
colImage.HeaderText = "..."
Som sagt, det är så jag har gjort. Har tyvärr inte grävt ner mig i ItemDataBound för DataGriden något så det är möjlig att det går att göra den vägen med, men det här är en väg jag vet fungerar.
Mvh
Jonas
Sv:Hur kan jag behandla olika rader och dess utssende när jag fyller DataGridde