1 pièce(s) jointe(s)
Binding List<UserControl> to Repeater
Bonjour,
J'ai un problème que j'arrive pas à résoudre :
Mon probleme est le suivant :
Je veux binder une liste de userControl à un repeater
Voici mon Code :
Code Behind ==>
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
AfficherQuestionnaire();
}
}
private void AfficherQuestionnaire()
{
var lstControls = new List<BaseUserControl>();
var context = new SCMModelContainer();
foreach(Question question in context.Questions)
{
var userControl = AddQuestionAndResponses(question);
lstControls.Add(userControl);
}
rQuestions.DataSource = lstControls;
rQuestions.DataBind();
}
protected BaseUserControl AddQuestionAndResponses(Question question)
{
var userControl = this.LoadControl(question.CurrentResponseType);
if (userControl != null)
{
userControl.ID = string.Format("userControl_Question_{0}_Axe{1}", question.Id, question.AxeId);
userControl.QuestionString = question.Libelle;
if (question.Responses.Count != 0)
{
userControl.Responses = question.Responses.ToList();
userControl.BindControl();
}
if (question.ResponseTypeId < 4 || (question.ResponseTypeId > 3 && question.Responses.Count > 0))
{
//pnlQuestions.Controls.Add(userControl);
}
}
return userControl;
}
protected BaseUserControl LoadControl(EResponseType responseType)
{
switch (responseType)
{
case EResponseType.Text :
return LoadControl("~/Client/UCS/ResponseAsTextBox.ascx") as BaseUserControl;
case EResponseType.Numeric:
return LoadControl("~/Client/UCS/ResponseAsNumericalUpDown.ascx") as BaseUserControl;
case EResponseType.Date:
return LoadControl("~/Client/UCS/ResponseAsDatePicker.ascx") as BaseUserControl;
case EResponseType.List:
return LoadControl("~/Client/UCS/ResponseAsDropDownList.ascx") as BaseUserControl;
case EResponseType.SimpleChoix:
return LoadControl("~/Client/UCS/ResponseAsRadioButtonList.ascx") as BaseUserControl;
case EResponseType.MultiChoix:
return LoadControl("~/Client/UCS/ResponseAsCheckBoxList.ascx") as BaseUserControl;
}
return null;
} |
Page Aspx ==>
Code:
1 2 3 4 5 6
|
<asp:Repeater ID="rQuestions" runat="server">
<ItemTemplate>
<%#Container.DataItem%>
</ItemTemplate>
</asp:Repeater> |
En fait mon probleme est que les controles ne s'afichent pas coté client, le repeater les prend commes des objets et applique la methode ToString() et je me retrouve avec un affichage (voir piece jointe)