Parser un controle à partir d'une classe externe
Salut tout le monde.
Là je m'attaque à un truc qui me parait super balaise.
J'ai fabriqué un ASCX (un contrôle utilisateur) et je voudrais le mettre en oeuvre à partir d'une classe externe. Je pense qu'en mettant du code je vais être plus explicite.
J'ai un ASCX (un autre puisque tout mon site repose sur l'utilisation des ASCX.) dans lequel je monte une grosse ASP:Table. Dans chaque cellule je charge des contrôles (TextBox, dropDownList, ...). ça fait un truc comme ça :
Code:
1 2 3 4 5 6
|
With cellChamp
.Controls.Add(FormulairX.AjouterChamp("EXEC dbo.SITE_DefinitionChampFormulaire " & champ("Id_ChampFormulaire")))
.ID = "cell" & champ("Nom_Champ")
.CssClass = "FORM_CelChamp"
End With |
cellChamp étant une cellule de la Table (asp:TableCell) qui acceuille un contrôle donné.
la Fonction AjouterChamp de ma classe FormulaireX prends une requête SQL comme paramettre car avec le résultat de cette requête elle va tout faire. En voici le code.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
Public Shared Function AjouterChamp(ByVal rqDefinitionChamp As String) As Control
Dim dtDefinitionChamp As DataTable = New DManager("DataDev").RetournerTable(rqDefinitionChamp)
Select Case dtDefinitionChamp.Rows(0).Item("Type_Champ")
Case "txt"
Dim ChampText As New TextBox
With ChampText
.Text = dtDefinitionChamp.Rows(0).Item("Param_Text1")
.ID = dtDefinitionChamp.Rows(0).Item("Type_Champ") & dtDefinitionChamp.Rows(0).Item("Nom_Champ")
.Width = Unit.Pixel(dtDefinitionChamp.Rows(0).Item("Param_Num1"))
End With
Return ChampText
Case "dac"
Dim dac As New Control
dac.Controls.Add(New System.Web.UI.WebControls.par)
Case Else
Dim ChampText As New TextBox
ChampText.Text = "sais pas"
Return ChampText
End Select
End Function |
Je vous ai pas mis tous les Case, l'idée c'est de voir le plus simple avec une TextBox, amis j'ai d'autre case qui font des trucs pas possible, genre deux DropDownList pour faire une recherche entre deux bornes dans la base.
Là où je cale c'est sur le Case "dac". J'ai laissé mon cod ene cours car je ne sais pas trop quoi mettre. L'idée c'est de dire que je vais chercher mon ASCX qui s'appelle "DropDownAutoComplete" avec une chaine du genre :
Citation:
<CompoSite:DropDownAutoComplete ID="dac1" runat="server"/>
J'arrive à faire ça lorsque je suis dans un ASCX côté CodeBehind parce que j'utilise la fonction ParseControl de System.Web.UI.TemplateControl. Mais là, dans ma classe externe, j'arrive pas à l'appeller.
Je pense bien que c'est aprce que je maitrise encore mal le concept objet et que ça doit être tout couillon à faire, mais je sèche.
Pouvez vous m'aider ?