Jag skulle behöva använda mig utav listBoxen's Tag för att spara id där. Det Tag attribut som finns direkt för Listbox går endast att ange ett enda värde för, för kontrollen. Jag vet inte riktigt vad du vill åstadkomma. Men jag antar att du vill ha nåt liknande senario. En listbox med t.ex. kundnamn ["olle","kalle","berra"] och till varje namn vill du även spara ett id [1,2,3] sen när man väljer "kalle" i listan vill du hämta id:et 2 för att hämta data t.ex. från en databas. Själv brukar jag skapa ett eget objekt som innehåller det jag vill, för att texten skall dyka upp i ListBoxen så overridar man bara ToString metoden så blir det bra. Ett exempel: Tacl bägge två för kanonsvar.Använda tag i listbox
Hur gör jag det.
Så här ser min nuvarande kod ut:
<code>
listBox1.Items.Add(ds.Tables["frånKunder"].Rows[a][kolumn].ToString());
nr[a] = ds.Tables["frånKunder"].Rows[a]["Kundnr"].ToString();
</code>
Några tips?Sv: Använda tag i listbox
Det kanske är bättre att istället binda kolumner till DisplayMember och ValueMember.
Något sånt här kanske:
<code>
listBox1.DataSource = ds.Tables["frånKunder"]
listBox1.DisplayMember = kolumn;
llstBox1.ValueMember = "Kundnr";
</code>
Här antog jag att kolumn var en string-variabel (utifrån ditt exempel).
Du kan även binda en ConcurrencyManager till din datakälla och på så sätt lätt uppdatera vilket som skall vara det valda objektet i din lista beroende på datakällan. Om det är önskvärt vill säga. Den som styr valt objekt och den som styr innehållet i listan behöver (och brukar väl oftast inte) vara samma datakälla. Men det kan jag ta upp om du tycker det verkar intressant. Sv: Använda tag i listbox
Skapa först en klass som representerar det du vill ha:
<code>
public class Kund
{
private string name;
public string Name
{
get{return name;}
set{name=value;}
}
private string id;
public string Id
{
get{return id;}
set{id=value;}
}
public Kund(string name,string id)
{
this.name=name;
this.id=id;
}
public override string ToString()
{
return name;
}
}
</code>
Sen kan du t.ex använda det så här:
<code>
public class MyForm : System.Windows.Forms.Form
{
....
public MyForm()
{
InitializeComponent();
listBox1.Items.Add(new Kund("olle","1"));
listBox1.Items.Add(new Kund("kalle","2"));
listBox1.Items.Add(new Kund("Berra","3"));
listBox1.SelectedIndexChanged += new System.EventHandler(this.listBox1_SelectedIndexChanged);
}
...
private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
Kund cust=(Kund)listBox1.SelectedItem;
MessageBox.Show(cust.Id);
}
}
</code>
Jag vet inte om det var detta du var ute efter...
För att använda Tag så behöver du annars bara kasta den till rätt typ:
<code>
listBox1.Tag=new int[100];
int[] nr=(int[])listBox1.Tag;
nr[0]=1;
</code>
P.S. ja, jag har tråkigt på jobbet just nu ;-) D.S
*********
EDIT: eller så gör du som Andreas skriver... (inlägget kom medan jag skrev detta)Sv: Använda tag i listbox
Jag skall leka lite med det, så jag lär väll återkomma.