使用 Winforms 在 C# 中将对象字符串转换为对象 (class)
Convert object string to object(class) in C# using Winforms
在这里我要告诉你我在做什么,然后是我的问题。我想告诉你们我在做什么..所以你们可以更好地理解我的问题。
提前致谢,
我正在做一个项目。这个应用程序是一个杂货计算器。我得到了一个名为 Artikel 的 class。这个 class 是我的其他派生 class 的基础 class,例如(蔬菜、饮料、热食等)。
我有一个组合框,里面装满了我数据库中的数据。我想要做的是将每个产品的价格添加到 "total cost cart"。我的基地 class 看起来像这样:
class Artikel
{
// properties
private string naam;
private double prijs;
private string winkel;
// properties
public string Naam
{
get { return naam; }
set { naam = value; }
}
public double Prijs
{
get { return prijs; }
set { prijs = value; }
}
public string Winkel
{
get { return winkel; }
set { winkel = value; }
}
// constructor
public Artikel(string naam, double prijs, string winkel)
{
this.Naam = naam;
this.Prijs = prijs;
this.Winkel = winkel;
}
// methods
public override string ToString()
{
string info = "€ " + Prijs;
return info;
}
在我的主窗体中,我使用此代码将其添加到我的组合框中:
foreach(var g in database.GetGroenteInfo())
{
cbGroentenLidl.Items.Add(g.Naam);
}
当组合框充满 "vegetable" 数据时,我可以 select 一个项目。从这里我可以使用以下代码将 selected 项目添加到我的 "lbLidlKosten":
lbLidlKosten.Items.Add(cbGroentenLidl.SelectedItem);
既然我的数据就在我想要的地方..这就是问题所在。现在我想添加我添加到列表框中的每个产品的价格.. .到我的标签。所以基本上我添加到 "lbLidlKosten" 的产品越多,我在 label.text 中的成本就会增加更多。我希望你明白我的意思。
我尝试了以下方法来让它工作:
artikelList = database.GetGroenteInfo();
//foreach (Artikel a in artikelList)
//{
// label2.Text = Convert.ToString(a.Prijs);
// label2.Text = cbGroentenLidl.SelectedItem;
//}
//foreach (Artikel a in lbLidlKosten.Items)
//{
// label2.Text = a.Prijs.ToString();
//}
//Artikel artikel = (Artikel)cbGroentenLidl.SelectedItem;
//label2.Text = artikel.Prijs.ToString();
foreach (Artikel a in lbLidlKosten.Items)
{
label2.Text = Convert.ToString(a.Prijs);
}
所有这些解决方案都行不通。因为我收到错误:
"Cannot convert object string to object Artikel".
有人知道吗?它可能很简单..但我找不到它并且我在过去的 3 天里被困住了。
谨致问候
在这里:
foreach(var g in database.GetGroenteInfo())
{
cbGroentenLidl.Items.Add(g.Naam);
}
您是将名称添加到组合框中,而不是项目本身。
也许您可以尝试将项目集合绑定到组合框数据源,如下所示:
cbGroentenLidl.DataSource = database.GetGroenteInfo().ToList();
cbGroentenLidl.DisplayMember = "Naam";
然后当您添加到列表框时,您将拥有对象,而不仅仅是名称。
您也没有增加该值。你可以试试这个:
double prijs = 0;
foreach (Artikel a in lbLidlKosten.Items)
{
prijs += a.Prijs;
}
label2.Text = Convert.ToString(prijis);
如果最后一行不起作用,试试这个:
label2.Text = "" + prijs;
在这里我要告诉你我在做什么,然后是我的问题。我想告诉你们我在做什么..所以你们可以更好地理解我的问题。
提前致谢,
我正在做一个项目。这个应用程序是一个杂货计算器。我得到了一个名为 Artikel 的 class。这个 class 是我的其他派生 class 的基础 class,例如(蔬菜、饮料、热食等)。
我有一个组合框,里面装满了我数据库中的数据。我想要做的是将每个产品的价格添加到 "total cost cart"。我的基地 class 看起来像这样:
class Artikel
{
// properties
private string naam;
private double prijs;
private string winkel;
// properties
public string Naam
{
get { return naam; }
set { naam = value; }
}
public double Prijs
{
get { return prijs; }
set { prijs = value; }
}
public string Winkel
{
get { return winkel; }
set { winkel = value; }
}
// constructor
public Artikel(string naam, double prijs, string winkel)
{
this.Naam = naam;
this.Prijs = prijs;
this.Winkel = winkel;
}
// methods
public override string ToString()
{
string info = "€ " + Prijs;
return info;
}
在我的主窗体中,我使用此代码将其添加到我的组合框中:
foreach(var g in database.GetGroenteInfo())
{
cbGroentenLidl.Items.Add(g.Naam);
}
当组合框充满 "vegetable" 数据时,我可以 select 一个项目。从这里我可以使用以下代码将 selected 项目添加到我的 "lbLidlKosten":
lbLidlKosten.Items.Add(cbGroentenLidl.SelectedItem);
既然我的数据就在我想要的地方..这就是问题所在。现在我想添加我添加到列表框中的每个产品的价格.. .到我的标签。所以基本上我添加到 "lbLidlKosten" 的产品越多,我在 label.text 中的成本就会增加更多。我希望你明白我的意思。
我尝试了以下方法来让它工作:
artikelList = database.GetGroenteInfo();
//foreach (Artikel a in artikelList)
//{
// label2.Text = Convert.ToString(a.Prijs);
// label2.Text = cbGroentenLidl.SelectedItem;
//}
//foreach (Artikel a in lbLidlKosten.Items)
//{
// label2.Text = a.Prijs.ToString();
//}
//Artikel artikel = (Artikel)cbGroentenLidl.SelectedItem;
//label2.Text = artikel.Prijs.ToString();
foreach (Artikel a in lbLidlKosten.Items)
{
label2.Text = Convert.ToString(a.Prijs);
}
所有这些解决方案都行不通。因为我收到错误: "Cannot convert object string to object Artikel".
有人知道吗?它可能很简单..但我找不到它并且我在过去的 3 天里被困住了。
谨致问候
在这里:
foreach(var g in database.GetGroenteInfo())
{
cbGroentenLidl.Items.Add(g.Naam);
}
您是将名称添加到组合框中,而不是项目本身。 也许您可以尝试将项目集合绑定到组合框数据源,如下所示:
cbGroentenLidl.DataSource = database.GetGroenteInfo().ToList();
cbGroentenLidl.DisplayMember = "Naam";
然后当您添加到列表框时,您将拥有对象,而不仅仅是名称。
您也没有增加该值。你可以试试这个:
double prijs = 0;
foreach (Artikel a in lbLidlKosten.Items)
{
prijs += a.Prijs;
}
label2.Text = Convert.ToString(prijis);
如果最后一行不起作用,试试这个:
label2.Text = "" + prijs;