我是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);
}
}
答案 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);
然后,您可以在选择项目后稍后获取该值。