~ ASP.NET: dynamische datagrid in usercontrol

Voorkennis:

  • 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

  1. Voeg een nieuwe usercontrol toe aan je asp.net project. Mijn usercontrol heet rekeningControl2.
  2. 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
  3. 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
  4. 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)

Resultaat

Een makkelijk herbruikbaar component, als je de events op deze manier doorgeeft aan de aspx pagina.

Reacties

Joren, ik dacht dat je interessantere nieuwsonderwerpen ging posten.Dan is dit alleszins een om u tegen te zeggen want in dit nieuwsbericht heb je geen saaie dingen verteld.We zullen maar niet zeggen dat je uiteindelijk helemaal NIETS hebt verteld he.

Ik ben er aan bezig. Ik heb er al iets opgezet omdat ik dan aan mezelf verplicht ben om er aan verder te werken. Het kan idd zijn dat het jou weinig zegt wink ([;)]). Maar ik vind het interessant. Kom vanavond ofzo nog eens terug ik hoop dat ik tegen dan wel wat inhoud eraan gegeven heb.
Mooi, je doet dat goe Joren. Ik vind het uitermate interessant. Ik denk wel dat er in de tweede zin een klein foutje staat.
NIEUW Nieuws, anders ga ik hier weer moeten beginnen zeveren en voor het niveau van jij wsite is dat niet bevorderlijk.
sjit maat, 't gaat ier nie goed wi. Da was te peizen é, nen computerfreak die ton nog eki informatica gaat studeren, daar moeten psychologische problemen van komen hé
Lauwe, gij hebt eens nog geen informatica nodig om psychologische problemen te hebben. Morgen om 8 uur in Lauwe zijn kot als je mee wilt gaan klimmen. Prijs 5 euro.
De OOOO, omdat deze letter het meest lijkt op het hoofd van Joren. En ook omdat Joren zijn persoonlijkheid meest op deze RONDE figuur lijkt. :d
De OOOO, omdat deze letter het meest lijkt op het hoofd van Joren. En ook omdat Joren zijn persoonlijkheid meest op deze RONDE figuur lijkt. :d
Om te bewijzen dat jij geen script bent moet het allerlaatste karakter van je reactie '6' zijn.

wink ([;)]) alt= happy ([8)]) alt= unhappy ([8(]) alt= lol ([8D]) alt= p ([8P]) alt= cool ([B)]) alt= beer ([B]) alt=
 
© 2012 0110.be