值在列表框中显示为 class 名称

Values appear as the class name in the listbox

我正在将数据库中的字段读入列表,就像这样

PaceCalculator pace = new PaceCalculator();
List<PaceCalculator> Distancelist = new List<PaceCalculator>();
while (Reader.Read()) //Loops through the database and adds the values in EventDistance to the list
{
    pace.Distance = (int)Reader["EventDistance"];
    Distancelist.Add(pace);
} 

我想将值放入列表框中,但是当我这样做时:

listBox1.DataSource = Distancelist;

它只显示 class 个名字,即 PaceCalculator。它显示正确数量的值,它只显示 class 名称。我想看看里面的整数。

指定PaceCalculator的属性显示。

listBox1.DataSource = Distancelist;
listBox1.DisplayMember = "Distance";

ListBox 控件允许您从集合中选择 属性 以显示给用户。

还有一个 ValueMember 属性 允许您为 ListBox 中的每个项目指定值。假设您的数据包含一个名为 "SomeUniqueRecordId" 的 ID,例如:

listBox1.ValueMember = "SomeUniqueRecordId";

你有两个选择,

  • 将 class 中的 ToString 覆盖为 return 所需的字符串
  • ,如果你只想显示Distance然后指定为DisplayMember

喜欢:

listBox1.DisplayMember = "Distance";
listBox1.DataSource = Distancelist;

这会显示列表中的距离元素。或者您可以在 class PaceCalculator 中覆盖 ToString,例如:

public override string ToString()
{
    return string.Format("{0},{1},{2}", property1, property2, property3);
}

编辑:

根据您的评论和查看您的代码,您做错了一件事。

this only displays the last value in the list, 46, 8 times

您在每次迭代的列表中添加了 class 的相同实例 (pace)。因此它持有最后一个值 (46)。您需要在迭代中实例化一个新对象,例如:

while (Reader.Read()) 
{
    PaceCalculator pace = new PaceCalculator();
    pace.Distance = (int)Reader["EventDistance"];
    Distancelist.Add(pace);
}