计算具有数据绑定的列表框的项目

时间:2015-02-19 02:14:37

标签: c# winforms

我有一个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,一切正常。我在搜索和尝试的日子里找不到任何答案。非常感谢提前。

1 个答案:

答案 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"]);
}