2009-10-08 10 views
0

Je travaille depuis quelques jours pour essayer de comprendre comment procéder. Travailler en C# J'ai une liste de données tirée de diverses tables de base de données. Je veux créer différents DropDownLists à partir de ces données qui persisteront sur PostBacks. Une façon de bricoler cela consistait à analyser les données dans List> et à imbriquer deux répéteurs l'un dans l'autre. Le problème avec ceci est que les SelectedValues ​​ne sauvegardent pas dans ViewState.Contrôles dynamiques créés à partir des données de la base de données

Y at-il un moyen facile de faire cela, je suis absent?

Merci beaucoup

Répondre

1

Je recommanderais d'utiliser le contrôle DropDownList pour afficher vos résultats individuels.

En l'avant, vous devez déclarer simplement votre liste déroulante en tant que telle:

<asp:DropDownList id="ddl1" runat="server"> 
</asp:DropDownList> 

Votre code backend doit contenir une méthode qui lie la source de données à la liste déroulante. ex:

this.ddl1.DataSource = ds; //Assuming that you are using a DataSet called ds. 
this.ddl1.DataTextField = "TextColumnName"; //The column name or property name you want to use as the text data 
this.ddl1.DataValueField = "ValueColumnName"; //The column name or property name you want to use as the value data 
this.ddl1.DataBind(); 

Appelez ce que dans le back-end lors de la liaison est nécessaire, par exemple sur la charge de la page initiale, ou lorsque la source de données doit être réactualisé.

Si vous voulez un répéteur de listes déroulantes, il suffit de faire ce qui suit:

<asp:repeater id="rpt1" runat="server"> 
    <ItemTemplate> 
     <asp:DropDownList id="ddl1" runat="server"> 
     </asp:DropDownList> 
    </ItemTemplate> 
</asp:repeater> 

Bind votre source de données qui contient la collection de valeurs que vous voulez pour chaque DDL au répéteur et dans le Dans l'événement OnItemDatabound du répéteur, liez l'élément de données ou la source à la liste déroulante de chaque élément de répéteur.

Si vous souhaitez que vos choix persistent, enveloppez l'ensemble de la logique de liaison dans une méthode qui est appelée uniquement sur Page_Load à l'intérieur d'une instruction if qui vérifie si la page est en PostBack.

if(!IsPostBack) { //Add method here } 

Le Viewstate devrait prendre soin du reste.

+0

Merci pour l'aide. Si je devais utiliser un répéteur, avez-vous une idée de la façon dont je pourrais aussi limiter les listes déroulantes à 3 par rangée? – rpf3

+0

Juste pour m'assurer que je comprends bien, vous voulez un contrôle répétitif qui, pour chaque rangée, affiche n'importe où de 1 à 3 listes déroulantes? C'est ce que je vous imagine essayez d'atteindre: <- Begin Répéteur -> <> <--DDL--><--DDL--><--DDL--> <> <> <--DDL--> <> <> <--DDL--><--DDL--> <> . . . <- End Repeater -> C'est un peu grossier, mais est-ce le type de sortie que vous recherchez? –

+0

C'est l'espoir. Fondamentalement, j'ai une table qui contiendra tous les DDL.Ces DDL sont des options de filtrage pour l'ensemble de données qui s'affiche en dessous d'eux. Je ne les veux pas tous en une seule ligne car ils vont se croquer car je ne sais pas combien il y en aura. Je ne veux pas non plus qu'ils soient un par rangée parce que je pense que ce sera inintéressant. – rpf3

Questions connexes