Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

affecter la construction d'un objet (dans une class) dans code behind

4 réponses
Avatar
herve
Bonjour,

Je cherche à construite un objet entier dans un fichier vb (permetra de
faire plusieuers construction) ensuite l'affecter dans le code-behind,
plutôt que de la faire pour chacune des proprités.
Je n'ai pas d'erreur à la compilation, mais pas de rendu à l'exécution.
Merci de votre aide
Hervé

page ASPX
<asp:datagrid id="dgLst" runat="server" />

CODE BEHIND

Private Sub Page_PreRender(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.PreRender
If Not Page.IsPostBack Then
...
dgLst = _creeColDataGrid()


FICHIER VB

Private ReadOnly Property _creeColDataGrid() As DataGrid
Get
Dim _dgLst As New DataGrid
_dgLst.AutoGenerateColumns = "False"
Dim dgBC_IdInt As New BoundColumn
dgBC_IdInt.DataField = "id_int"
dgBC_IdInt.Visible = False
_dgLst.Columns.Add(dgBC_IdInt)

Return _dgLst
End Get
End Property

4 réponses

Avatar
Zazar
Bonjour,

Je cherche à construite un objet entier dans un fichier vb (permetra de
faire plusieuers construction) ensuite l'affecter dans le code-behind,
plutôt que de la faire pour chacune des proprités.



Pour celà, mettez un PlaceHolder dans votre fichier .aspx, et ajouter votre
contrôle créé dans le CodeBehind aux contrôles du PlaceHolder.

Je n'ai pas d'erreur à la compilation, mais pas de rendu à l'exécution.
Merci de votre aide
Hervé

page ASPX
<asp:datagrid id="dgLst" runat="server" />

CODE BEHIND

Private Sub Page_PreRender(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.PreRender
If Not Page.IsPostBack Then
...
dgLst = _creeColDataGrid()


FICHIER VB

Private ReadOnly Property _creeColDataGrid() As DataGrid
Get
Dim _dgLst As New DataGrid
_dgLst.AutoGenerateColumns = "False"
Dim dgBC_IdInt As New BoundColumn
dgBC_IdInt.DataField = "id_int"
dgBC_IdInt.Visible = False
_dgLst.Columns.Add(dgBC_IdInt)

Return _dgLst
End Get
End Property



Petites précisions :
1)
Vous semblez faire une différence entre le code-behind et le fichier VB : il
n'y en a pas

2)
La ligne <asp:datagrid id="dgLst" runat="server" />, s'occupe déjà de faire
le new DataGrid, de l'ajouter aux controles fils de la page courante et si
la classe de base contient un membre qui s'appelle dgLst, alors le nouveau
DataGrid est affecté à ce membre.
Si ensuite, vous affectez une autre valeur à dgList dans le code-behind,
ceci n'affecter pas l'objet qui a été ajouté aux contrôles de la page. Or
c'est celui-ci qui sera utilisé pour le rendu. Si vous voulez remplacez
l'objet, il faut le retirer de la collection et en ajouter un autre (mais
c'est nul comme façon de faire)

3)Un DataGrid n'est pas affiché s'il sa méthode DataBind() n'a pas été
appelé.

--
Zazar.
Avatar
herve
Zazar a écrit :

Bonjour,


Je cherche à construite un objet entier dans un fichier vb (permetra de
faire plusieuers construction) ensuite l'affecter dans le code-behind,
plutôt que de la faire pour chacune des proprités.




Pour celà, mettez un PlaceHolder dans votre fichier .aspx, et ajouter votre
contrôle créé dans le CodeBehind aux contrôles du PlaceHolder.


Effectivement je pensai à cette solution (mais en dernier ressort car
j'aurai préféré garder une partie dans la page aspx ...). Dommage qu'il
n'y ait pas d'autres pistes


Je n'ai pas d'erreur à la compilation, mais pas de rendu à l'exécution.
Merci de votre aide
Hervé

page ASPX
<asp:datagrid id="dgLst" runat="server" />

CODE BEHIND

Private Sub Page_PreRender(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.PreRender
If Not Page.IsPostBack Then
...
dgLst = _creeColDataGrid()


FICHIER VB

Private ReadOnly Property _creeColDataGrid() As DataGrid
Get
Dim _dgLst As New DataGrid
_dgLst.AutoGenerateColumns = "False"
Dim dgBC_IdInt As New BoundColumn
dgBC_IdInt.DataField = "id_int"
dgBC_IdInt.Visible = False
_dgLst.Columns.Add(dgBC_IdInt)

Return _dgLst
End Get
End Property




Petites précisions :
1)
Vous semblez faire une différence entre le code-behind et le fichier VB : il
n'y en a pas


on ne se comprend pas tout à fait mais le code behind est dans un
fichier vb (bien sur) mais lié à la page aspx.
Tandis que ce que j'appelle "le fichier vb" se trouve effectivement dans
un 3ème fichier (je crois que certains l'appelle composant!?).
Ce qui change pas mal de chose dans les déclarations.

2)
La ligne <asp:datagrid id="dgLst" runat="server" />, s'occupe déjà de faire
le new DataGrid, de l'ajouter aux controles fils de la page courante et si
la classe de base contient un membre qui s'appelle dgLst, alors le nouveau
DataGrid est affecté à ce membre.
Si ensuite, vous affectez une autre valeur à dgList dans le code-behind,
ceci n'affecter pas l'objet qui a été ajouté aux contrôles de la page. Or
c'est celui-ci qui sera utilisé pour le rendu. Si vous voulez remplacez
l'objet, il faut le retirer de la collection et en ajouter un autre (mais
c'est nul comme façon de faire)


je pense que c'est çà que je n'avai pas bien saisi.


3)Un DataGrid n'est pas affiché s'il sa méthode DataBind() n'a pas été
appelé.


Bien sûr, en fait je bind dans une portion de code non montrée, mais
j'aurai pu oublier ...
Merci de toute façon pour toutes ces remarques
Hervé

--
Zazar.




Avatar
Zazar
> >>Je cherche à construite un objet entier dans un fichier vb (permetra de
>>faire plusieuers construction) ensuite l'affecter dans le code-behind,
>>plutôt que de la faire pour chacune des proprités.
>
>
> Pour celà, mettez un PlaceHolder dans votre fichier .aspx, et ajouter


votre
> contrôle créé dans le CodeBehind aux contrôles du PlaceHolder.
Effectivement je pensai à cette solution (mais en dernier ressort car
j'aurai préféré garder une partie dans la page aspx ...). Dommage qu'il
n'y ait pas d'autres pistes



Qu'entendez vous par "j'aurai préféré garder une partie dans la page aspx "
?


> Petites précisions :
> 1)
> Vous semblez faire une différence entre le code-behind et le fichier VB


: il
> n'y en a pas
on ne se comprend pas tout à fait mais le code behind est dans un
fichier vb (bien sur) mais lié à la page aspx.
Tandis que ce que j'appelle "le fichier vb" se trouve effectivement dans
un 3ème fichier (je crois que certains l'appelle composant!?).
Ce qui change pas mal de chose dans les déclarations.



Ha ok, je n'avais pas compris.


>
> 3)Un DataGrid n'est pas affiché s'il sa méthode DataBind() n'a pas été
> appelé.
Bien sûr, en fait je bind dans une portion de code non montrée, mais
j'aurai pu oublier ...



ok.

--
Zazar
Avatar
herve
Zazar a écrit :
Je cherche à construite un objet entier dans un fichier vb (permetra de
faire plusieuers construction) ensuite l'affecter dans le code-behind,
plutôt que de la faire pour chacune des proprités.




Pour celà, mettez un PlaceHolder dans votre fichier .aspx, et ajouter





votre

contrôle créé dans le CodeBehind aux contrôles du PlaceHolder.



Effectivement je pensai à cette solution (mais en dernier ressort car
j'aurai préféré garder une partie dans la page aspx ...). Dommage qu'il
n'y ait pas d'autres pistes




Qu'entendez vous par "j'aurai préféré garder une partie dans la page aspx "
?


la déclaration du datagrid:
<asp:datagrid id="dgLst" runat="server" ...

----
ça y est je viens de résoudre mon problème et d'une autre façon:
je passe l'obet par valeur

Property creeColDataGrid(ByVal dglst As DataGrid)
Get
Dim dgBC_IdInt As New BoundColumn
dgBC_IdInt.DataField = "id_int"
dgBC_IdInt.Visible = False
dglst.Columns.Add(dgBC_IdInt)

...
Return dglst
End Get
End Property

ce qui me permet de l'affecter dans le code-behind
dgLst =creeColDataGrid(dgLst)

hervé