string[,] Languages; Du kan inte göra det direkt med en vanlig string array. Du måste göra en klass med två publika get properties, en för display värdet och en för data värdet. Typ så här: Tackar, det fungerar utmärkt!Hur hämtar jag data till en dropdownlist från en flerdimensionell array?
Languages[0, 0] = "swe";
Languages[1, 0] = "Swedish";
Languages[0, 1] = "eng";
Languages[1, 1] = "English";
Languages[0, 2] = "fre";
Languages[1, 2] = "French";
Hur använder jag den här arrayen för att lägga in data i en dropdownlist?
Jag vill använda Languages[0,i] som DataValueField och [1,i] som DataTextFieldSv: Hur hämtar jag data till en dropdownlist från en flerdimensionell array?
public class Lang
{
protected string _DataValue;
protected string _DataText;
public string DataValue
{
get
{
return _DataValue;
}
}
public string DataText
{
get
{
return _DataText;
}
}
public Lang (string value, string text)
{
_DataValue = value;
_DataText = text;
}
}
Du behöver sedan en collection med denna klass. Jag har baserat en klass på en List<Lang> för att kunna göra en egen constructor:
public class LangCollection:List<Lang>{
public LangCollection (string[,] strInit)
{
for(int i=0;i<=strInit.GetUpperBound(0);i++){
Lang l = new Lang(strInit[i,0],strInit[i,1]);
Add(l);
}
}
}
Du behöver sedan ett sätt att enkelt initiera din Lang och LangCollection klass:
public static string[,] langStr =new string[,]{
{"eng","English"},
{"swe","Swedish"},
{"fra","French"}
};
LangCollection langCollection = new LangCollection(langStr);
Initieringen lägger du direkt i den form klassen där du har din combobox utanför alla funktioner. langStr måste vara statisk för att langCollection ska gå att initiera på det här sättet.
Sedan kommer magin med databinding och data source i VS2005:
Välj din combobox i form designern och klicka på den lilla pilen uppe till höger på combo boxen. Checka "Use data bound items". Droppa listan för data source och välj "Add project data source". Ett nytt fönster öppnas och där klickar du på Object ikonen och klickar på next. Sedan väljer du Assemblyt och namespacet där din Lang klass finns och klickar på Lang. Sedan klickar du på next och finish. Du har nu talat om vilken typ av objekt som ska finnas i combo boxen (Lang i det här fallet).
Sedan droppar du Display member listan och väljer DataText fältet.
Sedan droppar du Value member listan och väljer DataValue fältet.
Du har nu talat om vilka fält i Lang som combo boxen ska visa resp. returnera.
Sedan droppar du Selected value listan och väljer LangDataSource och fältet DataValue. Du har nu talat om vilket Selected fält comboboxen ska returnera.
Nu har du konfigurerat databinding för comboboxen. Nu behöver du bara tala om vilken comboboxens data source ska vara. I ditt fall så är ju det langCollection. Detta kan du göra efter InitializeComponents i constructorn för formen där comboboxen finns.
cbTest.DataSource = langCollection;
Där cbTest är member variabeln för comboboxen.
När du nu kör ditt program så kommer comboboxen att visa "English", "Swedish" och "French" och
returnera "eng","swe" eller "fra" som Selected property värde.
private void cbTest_SelectedIndexChanged (object sender, EventArgs e)
{
string str = (string)cbTest.SelectedValue;
}
I exemplet för SelectedIndexChanged ovan så blir alltså str="eng","swe" eller "fra" beroende på vilket som är valt.
Det verkar kanske lite omständigt men det är ganska enkelt (när man vet hur). Man kan också göra databinding direkt i koden men det går jag inte in på här.
Lycka till
/Ruben
Sv:Hur hämtar jag data till en dropdownlist från en flerdimensionell array?
Var mera komplicerat än jag trodde, men som sagt inte så svårt när man förstår det.