OVH Cloud OVH Cloud

Datalist imbriquées

5 réponses
Avatar
TheHach
Bonjour à tous.

Je vais tenter d'expliquer le plus simplement mon problème.
Dans ma boite, nous avons des systèmes qui sont composés de lots, lots
qui sont eux-mêmes composés d'articles.
Sur une page VB.NET, il me faut afficher cette arborescence.
Visuellement, il faudrait avoir la liste des systèmes, et un petit (+)
devant le système. Un clic sur ce (+) devrait afficher les différents
lots du système, mais un peu en décalé. Ces lots auraient également le
petit (+) devant, qui afficherait la liste des articles du lot,
également en décalé.
Ca devrait donner ça :

(+) Système 1
(+) Lot 1
Article 1
Article 2
(+) Lot 2
Article 3
Article 4
etc...

Comme les systèmes, lots et articles sont dans la même table (le type
est défini dans un champ), il me faut trois requêtes : une qui liste
tous les systèmes, une deuxième qui liste les lots du système
sélectionnée, et une troisième qui liste les articles du lot
sélectionné.
Je pensais faire ça avec des datalist imbriquées (une datalist pour le
système ; dans le selectedItemTemplate de cette datalist, une datalist
pour le lot ; et dans le selectedItemTemplate de la DL du lot, une
nouvelle DL pour l'article).
Malheureusement, j'ai remarqué que ça ne fonctionnait pas.

Quelqu'un aurait-il une idée à me soumettre ?

Merci d'avance !!

5 réponses

Avatar
Osman MALIK [MS]
Bonjour,

Vous trouverez ici
(http://msdn.microsoft.com/msdnmag/issues/03/10/CuttingEdge/) un article qui
traite de votre besoin.

Cordialement,

Osman MALIK [MS]

"TheHach" wrote in message
news:
Bonjour à tous.

Je vais tenter d'expliquer le plus simplement mon problème.
Dans ma boite, nous avons des systèmes qui sont composés de lots, lots
qui sont eux-mêmes composés d'articles.
Sur une page VB.NET, il me faut afficher cette arborescence.
Visuellement, il faudrait avoir la liste des systèmes, et un petit (+)
devant le système. Un clic sur ce (+) devrait afficher les différents
lots du système, mais un peu en décalé. Ces lots auraient également le
petit (+) devant, qui afficherait la liste des articles du lot,
également en décalé.
Ca devrait donner ça :

(+) Système 1
(+) Lot 1
Article 1
Article 2
(+) Lot 2
Article 3
Article 4
etc...

Comme les systèmes, lots et articles sont dans la même table (le type
est défini dans un champ), il me faut trois requêtes : une qui liste
tous les systèmes, une deuxième qui liste les lots du système
sélectionnée, et une troisième qui liste les articles du lot
sélectionné.
Je pensais faire ça avec des datalist imbriquées (une datalist pour le
système ; dans le selectedItemTemplate de cette datalist, une datalist
pour le lot ; et dans le selectedItemTemplate de la DL du lot, une
nouvelle DL pour l'article).
Malheureusement, j'ai remarqué que ça ne fonctionnait pas.

Quelqu'un aurait-il une idée à me soumettre ?

Merci d'avance !!


Avatar
TheHach
"Osman MALIK [MS]" wrote in
news:#:

Bonjour,

Vous trouverez ici
(http://msdn.microsoft.com/msdnmag/issues/03/10/CuttingEdge/) un
article qui traite de votre besoin.

Cordialement,

Osman MALIK [MS]




Merci pour votre lien.
Mais ceci ne me permettrait uniquement d'insérer un datagrid dans une
datalist, C'est à dire un niveau et un sous-niveau.
Moi il m'en faudrait un troisième....
Avatar
Delf
TheHach wrote:

Merci pour votre lien.
Mais ceci ne me permettrait uniquement d'insérer un datagrid dans une
datalist, C'est à dire un niveau et un sous-niveau.
Moi il m'en faudrait un troisième....



Suffit de réitérer le principe, non ?

--
Delf
Avatar
TheHach
Delf wrote in news:438c0af0$0$7341
$:

TheHach wrote:

Merci pour votre lien.
Mais ceci ne me permettrait uniquement d'insérer un datagrid dans une
datalist, C'est à dire un niveau et un sous-niveau.
Moi il m'en faudrait un troisième....



Suffit de réitérer le principe, non ?




Euh, oui, mais non... :-)
En fait, l'exemple parlait d'intégrer un datagrid dans une datalist. Moi
il me faut intégrer une datalist dans une autre qui est incluse dans une
troisième. Bon, le principe devrait être à peu près le même que pour un
datagrid, mais l'exemple est en C# et je suis en VB. Donc un peu galère.
J'ai donc réessayé d'inclure une datalist dans le SelectedItemTemplate
d'une autre. J'ai créé les différents champs à partir du code HTML. Mais
dans le code behind, impossible d'accéder à ma seconde datalist. Il ne
la reconnait pas.
Et lors que je rajoute le code suivant
Protected WithEvents DataList2 As System.Web.UI.WebControls.DataList
il le supprime lors de la compilation.

Voilà le code qu'il me faudrait dans le code behind pour la 1ere
datalist :

Private Sub DataList1_ItemCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataListCommandEventArgs) Handles
DataList1.ItemCommand
Select Case e.CommandName
Case "select"
Dim myCmd As OracleClient.OracleCommand = New
OracleClient.OracleCommand

' On crée la nouvelle requête en lien avec le champ PosC
de l'enregistrement courant
myCmd.CommandText = "SELECT PART_NUMBER, POSITION_C,
POSITION_D, POSITION_E FROM" & _
" ORDERLINE WHERE (ORDER_NUMBER = UPPER('abc0123')) AND
(POSITION_C=" & CType(e.Item.FindControl("lblPosC"), Label).Text & ")
AND (POSITION_D IS NOT NULL)" & _
" AND (POSITION_E IS NULL)"
myCmd.Connection = Me.OracleConnection1

Dim myDS As DataSet = New DataSet
Dim myOD As OracleClient.OracleDataAdapter = New
OracleClient.OracleDataAdapter
myOD.SelectCommand = myCmd
myOD.Fill(myDS)

'On crée la 2e Datalist
DataList2.DataSource = myDS
DataList2.DataBind()

DataList1.SelectedIndex = e.Item.ItemIndex
DataList1.DataBind()
Case "unselect"
DataList1.SelectedIndex = -1
DataList1.DataBind()
End Select
End Sub

Comme dit, ça ne fonctionne pas parce que l'objet DataList2 est
inexistant pour lui.
Comment faire pour que tout ça fonctionne ???
Merci d'avance !
Avatar
Delf
TheHach wrote:

[...]



Si j'étais toi, je passerai par plusieurs contrôles utilisateur.

- 1 contrôle 'Article'
- 1 contrôle 'Lot', utilisant le contrôle 'Article'
- 1 contrôle 'Système' utilisant le contrôle 'Lot'

Dans la page principal, j'utiliserais un PlaceHolder (ou DataList) qui
afficherait les contrôles 'Systèmes'...

Bref, c'est p'tre pas clair, je peux te faire un court exemple si tu le
souhaites mais en C#.

Si ça t'intéresse, send moi un mail sur strafer ATE online DOTE fr et
mets dans le sujet [DOTNET] sinon ça va finir dans la boîte à spam :)

--
Delf