~ ASP.NET: dynamische datagrid in usercontrol
» Door Joren op woensdag 17 maart 2004 - Reacties(8) - ReageerVoorkennis:
- Basiskennis van VB.NET;
- Notie van events in .NET;
- Basiskennis van Visual Studio.NET;
- Weten hoe je, met behulp van Visual Studio, een ASP.NET project maakt.
Inleiding:
Hieronder staat een beschrijving hoe je in een usercontrol een datagrid kunt creëren waarvan het aantal kolommen afhangt van een of meerdere variabelen.Het probleem situeert zich in het doorgeven van die variabelen aan een usercontrol. Met propory's (attributen) kun je niet werken om dat die nog niet geinitialiseert zijn in de Page_Init methode. In deze methode worden de kolommen aan de datagrid toegevoegd.
Als je dan nog eens afhankelijk van die variabelen verschillende commands met je datagrid wil uitvoeren (SortCommand, UpdateCommand, EditCommand,...) of net niet dan is het niet mogelijk om met de designer van visual studio te werken.
Werkwijze
- Voeg een nieuwe usercontrol toe aan je asp.net project. Mijn usercontrol heet rekeningControl2.
- Verwijder alle code in de codebehind file, in mijn geval rekeningControl2.vb. Ik hield alleen dit over:
Public Class rekeningControl2
Inherits System.Web.UI.UserControl
End Class - Declareer je attributen en maak de constructor(s):
#Region " Attributen"
Private datum As DateTime
Private klasNummer As Integer
Private isBeveiligd As Boolean
Private dataGridRekening As DataGrid
#End Region
#Region " Constructors"
Public Sub New(ByVal datum As DateTime, ByVal klasNummer As Int16, ByVal isBeveiligd As Boolean)
Me.datum = datum
Me.klasNummer = klasNummer
Me.isBeveiligd = isBeveiligd
End Sub
Public Sub New(ByVal datum As DateTime, ByVal klasNummer As Integer)
Me.new(datum, klasNummer, True)
End Sub
#End Region - Maak een Page_Init methode die de methode om de datagrid te initialiseren oproept. In de datagrid_Init() methode worden de kolomen toegevoegd.
Private Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Init
DataGrid_Init()
End Sub
Private Sub DataGrid_Init()
dataGridRekening = New DataGrid
dataGridRekening.AutoGenerateColumns = False
Dim DataGridRekeningDataTable As DataTable = 'haalt datasource op
AddHandler dataGridRekening.UpdateCommand, AddressOf Me.HandleUpdateCommand
AddHandler dataGridRekening.CancelCommand, AddressOf Me.HandleCancelCommand
AddHandler dataGridRekening.EditCommand, AddressOf Me.HandleEditCommand
Dim editCol As New EditCommandColumn
editCol.HeaderText = "Opdrachten"
editCol.FooterText = editCol.HeaderText
editCol.EditText = "Veranderen"
editCol.CancelText = "Annuleren"
editCol.UpdateText = "Update"
editCol.ButtonType = ButtonColumnType.LinkButton
editCol.ItemStyle.HorizontalAlign = HorizontalAlign.Center
editCol.HeaderStyle.HorizontalAlign = HorizontalAlign.Center
dataGridRekening.Columns.Add(editCol)
If isBeveiligd = False Then
editCol.Visible = False
End If
For Each kolom As DataColumn In DataGridRekeningDataTable.Columns
Dim Col As BoundColumn = New BoundColumn
Col.DataField = kolom.ColumnName
Col.HeaderText = kolom.ColumnName
Col.FooterText = kolom.ColumnName
Col.ReadOnly = True
dataGridRekening.Columns.Add(Col)
Next
Me.Controls.Add(dataGridRekening)
. Maar ik vind het interessant. Kom vanavond ofzo nog eens terug ik hoop dat ik tegen dan wel wat inhoud eraan gegeven heb.