ASP.NET: source de données Listbox et databind

J’ai une liste de sélection vide sur la page .aspx

lstbx_confiredLevel1List 

Je génère deux listes par programme

 List l1ListText = new List(); //holds the text List l1ListValue = new List();//holds the value linked to the text 

Je veux charger la lstbx_confiredLevel1List liste lstbx_confiredLevel1List sur la page .aspx avec les valeurs et le texte ci-dessus. Donc, je suis en train de suivre:

 lstbx_confiredLevel1List.DataSource = l1ListText; lstbx_confiredLevel1List.DataTextField = l1ListText.ToSsortingng(); lstbx_confiredLevel1List.DataValueField = l1ListValue.ToSsortingng(); lstbx_confiredLevel1List.DataBind(); 

mais il ne charge pas lstbx_confiredLevel1List avec l1ListText et l1ListValue .

Des idées?

Pourquoi n’utilisez-vous pas la même collection que DataSource ? Il doit simplement avoir deux propriétés pour la clé et la valeur. Vous pouvez par exemple utiliser un Dictionary :

 var ensortinges = new Dictionary(); // fill it here lstbx_confiredLevel1List.DataSource = ensortinges; lstbx_confiredLevel1List.DataTextField = "Value"; lstbx_confiredLevel1List.DataValueField = "Key"; lstbx_confiredLevel1List.DataBind(); 

Vous pouvez également utiliser un type anonyme ou une classe personnalisée.

En supposant que vous avez déjà ces listes et que vous devez les utiliser en tant que DataSource. Vous pouvez créer un Dictionary à la volée:

 Dictionary dataSource = l1ListText .Zip(l1ListValue, (lText, lValue) => new { lText, lValue }) .ToDictionary(x => x.lValue, x => x.lText); lstbx_confiredLevel1List.DataSource = dataSource; 

Vous feriez mieux d’utiliser un dictionnaire:

 Dictionary list = new Dictionary(); ... lstbx_confiredLevel1List.DataSource = list; lstbx_confiredLevel1List.DataTextField = "Value"; lstbx_confiredLevel1List.DataValueField = "Key"; lstbx_confiredLevel1List.DataBind(); 

Malheureusement, les DataTextField et DataValueField ne sont pas utilisés comme ça. Il s’agit de la représentation textuelle des champs qu’ils sont censés afficher de l’élément en cours de création de données dans la source de données.

Si vous avez un object qui contient à la fois du texte et une valeur, vous pouvez en faire une liste et le définir sur une source de données comme ceci:

 public class MyObject { public ssortingng text; public ssortingng value; public MyObject(ssortingng text, ssortingng value) { this.text = text; this.value = value; } } public class MyClass { List objects; public void OnLoad(object sender, EventArgs e) { objects = new List(); //add objects lstbx.DataSource = objects; lstbx.DataTextField = "text"; lstbx.DataValueField = "value"; lstbx.DataBind(); } }