Toon posts:

[ASP.NET] Dynamische datagrid in usercontrol

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil een usercontrol maken met daarin een datagrid met update mogelijkheden. Het aantal en soort kolommen van de datagrid zijn afhankelijk van een proporty van de usercontrol. Vb: bepaalde users kunnen de data wijzigen anderen kunnen de datagrid alleen maar zien. Er wordt ook een datum meegegeven, afhankelijk van die datum wordt er bepaalde data geladen.

Het lukt mij om op deze : [rml]gorgi_19 in "[ C#/.NET] Dynamische Controls en Postbac..."[/rml]"] manier een datagrid dynamisch te maken.

Wat me niet lukt is om die datagrid op te bouwen aan de hand van de proporties van de usercontrol. Deze zijn nog niet geinitialiseert in de DataGrid_Init of page_Init. De proporties worden in de code-behind van de aspx pagina megegeven met usercontrol.isBeveiligd = true

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
Private mijnIsBeveiligd As Boolean
Public Property isBeveiligd() As Boolean
    Get
        Return mijnIsBeveiligd
    End Get
    Set(ByVal Value As Boolean)
        mijnIsBeveiligd = Value
     End Set
 End Property

en dan in de page_init methode van het ascx bestand:
Visual Basic .NET:
1
2
3
4
5
6
7
8
If mijnIsBeveiligd then 
   Dim editCol As New EditCommandColumn
   datagridje.add(editCol)
end if 
...
'voeg andere kolommen toe
....
 Me.Controls.Columns.Add(editCol)

Dus hoe zorg ik ervoor dat ik een datagrid kan opbouwen in de init methode aan de hand van de proporty's ?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

/luimodus

Voeg ze toe en zet ze in je Load-event de visible property van die column goed aan de hand van je property.

En anders geef je ze aan de constructor mee van je usercontrol.
Verder snap ik niet waarom de .aspx pagina de rechten bepaald; die heeft imho alleen een presentatietaak. dmv een rol kan je data laten zien of niet.

[ Voor 52% gewijzigd door gorgi_19 op 16-03-2004 18:33 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Is idd een goed idee maar gaat in mijn geval hier helaas niet op. Ik geeft ook nog die datum mee, waardoor de rest van de data (en de kolommen) ook niet vast is. En dat zijn er te veel om invisible te zetten (10- 15 van ongeveer 50). Die beveiliging was maar een voorbeeld, gebruik ik niet.

Hoe geef ik die waarden mee met de constructor?
Dan krijg je in je usercontrol iets als
Visual Basic .NET:
1
2
3
sub new(datum as dateTime, isBeveiligd as boolean)
...
end sub

?
hoe roep je dat dan op in de aspx file?

update 1: ok ik denk dat ik er uit ben. Ik doe nog wat testjes en post dan hoe ik het gedaan heb voor het nageslacht :)

update 2: Ok nageslacht hier gaan we:

Je zet in je acsx file een constructor met de parameters die je wil doorgeven, die parameters geef je aan attributen die je ergens declareert bvb:

Visual Basic .NET:
1
2
3
4
5
6
Private datum As DateTime
Private isBeveiligd As Boolean
Public Sub New(ByVal datum As DateTime, ByVal isBeveiligd As Boolean)
        Me.datum = datum
        Me.isBeveiligd = isBeveiligd
End Sub

Deze attributen zijn dan bruikbaar in de page_init methode, waarin je je datagrid wordt opgebouwd:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
 dataGridtje= New DataGrid
        dataGridtje.AutoGenerateColumns = False
     ....
        AddHandler dataGridRekening.UpdateCommand, AddressOf Me.HandleUpdateCommand
        AddHandler dataGridRekening.CancelCommand, AddressOf Me.HandleCancelCommand
     ......
     
    if isBeveiligd then
         Dim editCol As New EditCommandColumn
          ....
         dataGridtje.Columns.Add(editCol)
    end if
End Sub


in de aspx file maak je nu zo een nieuwe control (hier eenControl) aan:
Visual Basic .NET:
1
2
  Dim c As eenControl = New eenControl(Now.AddDays(7), False)
        placeholder1.Controls.Add(c)

[ Voor 61% gewijzigd door Verwijderd op 16-03-2004 20:57 ]