我有一个listbox1(在C#winforms中),它是一个DataBindingSource(它是一个sqlite.db)。
//
// listBox1
//
this.listBox1.DataSource = this.itemWerteBindingSource;
this.listBox1.DisplayMember = "Frage-Nr";
this.listBox1.FormatString = "N0";
this.listBox1.FormattingEnabled = true;
this.listBox1.Location = new System.Drawing.Point(12, 12);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(113, 225);
this.listBox1.TabIndex = 15;
Form_Load事件是:
private void Form_Load(object sender, EventArgs e)
{
this.item_WerteTableAdapter.Fill(this.erhebungenDataSet.Item_Werte);
}
正在编译数据行的(项目/值)数字(1 2 3)在listbox1中正确显示
用于在标签中显示结果的Button_Click事件是:
private void btnresultB1_Click(object sender, EventArgs e)
{
if (listBox1.Items.Count == 0)
{
MessageBox.Show("There are no items in the listbox");
return;
}
double sum = 0;
foreach (object item in listBox1.Items)
{
sum += Convert.ToDouble(item.ToString());
//Here comes the FormatException
}
int count = listBox1.Items.Count;
double average = sum / count;
lbcount.Text = count.ToString();
lbsum.Text = sum.ToString();
lbavg.Text = average.ToString();
}
listbox1的项目是计数但未计算 - 格式异常。当我将数据发送到另一个listbox2
时 foreach (var item in listBox1.Items)
{
listBox2.Items.Add(item);
}
listbox2不显示数据(1 2 3),但显示“System.Data.DataRowView”。所以,我显然对listbox1中的Items的值有一个问题,无法解释/转换。我尝试使用十进制而不是双倍 - 相同的格式异常。
我不想让db(sqlite)进行计算。
我是编程新手。如何计算这样的数据绑定列表框?转换为通用列表也不起作用。如果将一些Numbers放入listbox2并将按钮事件更改为listbox2,一切正常。我在搜索和尝试的日子里找不到任何答案。非常感谢提前。
答案 0 :(得分:1)
您收到该错误是因为您的对象的ToString函数正在返回字符串" DataRowView",这不是您可以使用的数字。需要演员阵容:
sum += Convert.ToDouble(((DataRowView)item)["Frage-Nr"]);
可能更直接地使用数据源,在这种情况下,你可以试试这个:
foreach (DataRow dr in ((DataTable)itemWerteBindingSource.DataSource).Rows)
{
sum += Convert.ToDouble(dr["Frage-Nr"]);
}