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.