C#,获取列表框项ID?

时间:2014-07-29 08:09:58

标签: c# winforms listbox selecteditem

我是C#的新手,所以我遇到了问题......我有一个列表框,我在其中从数据库中写入数据。我读了ID,姓名,姓氏,但我只显示姓名和姓氏。现在我想要的是当我在列表中列出项目时,我想得到身份证明。怎么样?

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

3 个答案:

答案 0 :(得分:1)

ListBox存储对象,如果传递字符串,则原始数据将丢失。幸运的是,你可以使用一个对象:

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

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

像这样使用:

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

请注意,如果广泛使用此类对象,您可能希望使其更安全(使用私有设置方法,并且可能在构造函数中放置一些逻辑,例如接受SqlDataReader参数)。像这样:

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

像这样使用:

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

或者(如果您不想覆盖ToString()方法),可以设置ListBox以显示属性值。添加此属性:

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

然后在ListBox(在Designer中)设置此属性:

ListaImenika.DisplayMember = "DisplayName";

另见this post另一个例子。

答案 1 :(得分:-1)

我建议您使用this可能的解决方案,或者您可以简单地使用列表框' Tag属性用于存储您的ID。

答案 2 :(得分:-1)

尝试将ListItem添加到ListBox。

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

替换"价值"在填充列表框时使用您想要的ID。就像你有id = reader.GetInt32(0);

一样

然后,您可以在选择项目后稍后获取该值。