显示数据库中的项目(c#)

时间:2014-10-14 15:08:01

标签: c# database listbox

我在访问数据库中计算了一行。我的数据库包含电影公司,公司制作的电影和销售的电影数量。数据库中的信息比我提到的要多,但对于这个问题,我只看两列。电影公司和该公司制作的电影。一列称为公司,另一列称为电影。我需要统计电影公司制作的每部电影。我在数据库中统计了六家不同的电影公司。我的目标是简单地显示电影公司及其在列表框中制作的电影数量。

我有两大问题。 1.我的结果不会显示在列表框中。 2根据看我的代码的好人说。该计划没有计算任何东西。以下是我想要展示的示例

公司#Movies

派拉蒙4

20thCenturyfox 8

LucasFilm 6

我在想的是创建了一个嵌套的foreach循环,并且某个公司制作的每部电影都将它添加到列表框中。

private void tabP3_Click(object sender, EventArgs e)
    {
       foreach (DataRowView row in bindingSource1.List)
        {
            foreach (DataRowView row2 in bindingSource1.List)
            {
              if(((String)row2["Company"]).Equals(row["Movie"]))
                {
                int count = 0;
                count++;
                lbCompany.Items.Add((String.Format("{0,5}", count)));
                }

            }

        }

    }

2 个答案:

答案 0 :(得分:0)

为什么不使用Linq来实现解决方案?这首先是我要做的,以解决您的要求。

以下内容摘自post。 "数据"应该是你的收藏...... 在这里,您将获得一个包含2个字段的新类型(您可以根据自己的方便编辑/更改)。 您可能还想删除OrderBy。

foreach(var line in data.GroupBy(info => info.metric)
                        .Select(group => new { 
                             Metric = group.Key, 
                             Count = group.Count() 
                        })
                        .OrderBy(x => x.Metric)
{
     Console.WriteLine("{0} {1}", line.Metric, line.Count);
}

答案 1 :(得分:0)

首先,您绝不会输入if语句,因为您要比较不同对象的相等性。数据类型字符串的一个对象:(String)row2["Company"]和一个数据类型为System.Data.DataRow row["Movie"]的对象。进一步在每次迭代中,您将计数器设置回零。所以试试:

 int count = 0;
 foreach (DataRowView row in bindingSource1.List)
        {
            foreach (DataRowView row2 in bindingSource1.List)
            {
              if((row2["Company"].ToString()).Equals(row["Movie"].ToString()))
                {               
                count++;
                lbCompany.Items.Add((String.Format("{0}", count)));
                }

            }

        }