简体   繁体   中英

C#, get listbox item id?

I'm new to C#,so I have a problem...I have a listbox in which I write data from database. I read ID, Name, Lastname,but I display only Name and Lastname. Now what I want is when I cliclk on item in list, I wanna get id. How?

Baza.Konekcija novaKonekcija = new Baza.Konekcija(); //kreiranje objekta
novaKonekcija.konekcijaBaza(); //pozivanje metode konekcijaBaza() iz klase Konekcija
SqlCommand query = new SqlCommand(); //kreiranje query objekta
query.Connection = Baza.Konekcija.myConnection; //povezivanje sa objektm baze
query.CommandText = "SELECT ID, Ime, Prezime FROM PrvaTabela ORDER BY Ime;"; //novi query
SqlDataReader reader = query.ExecuteReader(); //pzivanje metode za iscitavanje
using (query)
{
    while (reader.Read())
    {
        ime = reader.GetString(1);
        prezime = reader.GetString(2);
        id = reader.GetInt32(0);
        ListaImenika.Items.Add(ime + " " + prezime);
    }
}

ListBox stores objects, if you pass a string then original data will be lost. Fortunately you can use an object for that:

class ItemFromDb
{
    public int Id { get; set; }
    public string Ime { get; set; }
    public string Prezime { get; set; }

    public override string ToString()
    {
        return Ime + " " + Prezime;
    }
}

Used like this:

while (reader.Read())
{
    ListaImenika.Items.Add(new ItemFromDb 
    {
        Ime = reader.GetString(1),
        Prezime = reader.GetString(2),
        Id = reader.GetInt32(0)
    });
}

Note that if such object is used extensively you may want to make it safer (using private settings method and, maybe, putting some logic inside constructor, for example accepting a SqlDataReader parameter). Like this:

sealed class ItemFromDb
{
   public ItemFromDb(SqlDataReader reader)
   {
       Id = reader.GetInt32(0);
       Ime = reader.GetString(1);
       Prezime = reader.GetString(2);

       _displayName = Ime + " " + Prezime;
   }

    public int Id { get; private set; }
    public string Ime { get; private set; }
    public string Prezime { get; private set; }

    public override string ToString()
    {
        return _displayName;
    }

    private string _displayName;
}

Used like this:

while (reader.Read())
    ListaImenika.Items.Add(new ItemFromDb(reader));

Alternatively (if you don't want to override ToString() method) you can setup your ListBox to display a property value. Add this property:

public string DisplayName
{
    get { return Ime + " " + Prezime; }
    // get { return _displayName; }
}

Then set this property on your ListBox (in Designer):

ListaImenika.DisplayMember = "DisplayName";

See also this post for another example.

我将向您介绍这种可能的解决方案,或者您可以简单地使用列表框的Tag属性在其中存储您的ID。

Try adding ListItem to ListBox.

like ListaImenika.Items.Add(new ListItem("Text", "Value"));

Replace "Value" with Id you want while populating your listbox. Like you have id = reader.GetInt32(0);

Then you can get the value later on when the item is selected.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM