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(); } }