2

我有一个包含许多列的数据网格。下面是其中的两列。我需要分别将 P/​​F 列的 P 和 F 值的计数值相加并比较它们。对于 P,总和是 3,对于 F,它是 7。我需要显示具有更大值的总和。有什么办法可以实现dis。

P/F | Count
------------------------
P   | 2
P   | 1
F   | 5
F   | 2

使用 Linq

 var p_sum = from p_col in dataGridView1  //-->  am getting error here(group by not found)
  group p_col  by p_col.Status into g 
  select g.Sum(p => p.weightagepercent) ; 
4

3 回答 3

0
int countF=0;
int countP=0;

foreach(DataRow row in DataTable.rows)
{
    if(row.itemArray[0].tostring().equals("F")
            {
                countf++;
            }
            `if(row.itemArray[0].tostring().equals("P")`
            {
                countP++;
            }
        }
        if(countF>countP)
{
    Display
}
else

Display

//用于dataGrid视图

dataGridView1.Rows.Add("P","1");
        dataGridView1.Rows.Add("F","2");
        int countF = 0;
        int countP = 0;
        for (int i = 0; i < dataGridView1.Rows.Count-1; i++)
        {
           string a= dataGridView1[0, i].Value.ToString();
           string b = dataGridView1[1, i].Value.ToString();
           if (a == "F")
           {
               countF= Convert.ToInt32(b);
               countF++;
           }
           if (a == "P")
           {
               countF = Convert.ToInt32(b);
               countP++;
           }
            }
        if (countF > countP)
        {
            //display
        }
        else
        {
            //display
        }
于 2013-11-11T07:50:40.743 回答
0

我不使用Linq。
下面是一个简单的工作代码

double sumP = 0;
double sumF = 0;

for (int i = 6; i < dataGridView1.Rows.Count-1; ++i)
{
    if (dataGridView1.Rows[i].Cells[6].Value.Equals("P"))
    {
        sumP += Convert.ToDouble(dataGridView1.Rows[i].Cells[9].Value);
    }
    else if (dataGridView1.Rows[i].Cells[6].Value.Equals("F"))
    {
        sumF += Convert.ToDouble(dataGridView1.Rows[i].Cells[9].Value);
    }
}

If(sumF>sumP)
{
    Label2.text="Fail";
}
else
{
    label2.text="Pass";
}
于 2013-11-11T11:19:49.333 回答
0

您可以使用 linq 执行以下操作:

var p_sum = 
    from p_col in datagrid
    group p_col  by p_col.datagrid_p_f_column into g 
    select g.Sum(p => p.datagrid_value_column) }; 

对 F 做同样的事情,然后在两个变量上用一个简单的更小、更大或最大值来显示更大的值


首先不要学习linq。它会让你的生活更轻松 :) 这是官方的101 linq 示例

假设我有一个名为 的类ExtraStringDataPoint,定义如下:

public class ExtraStringDataPoint : IDataPoint
{
    public ExtraStringDataPoint(double x, double y , string s)
    {
        X = x;
        Y = y;
        Extra = s;
    }
    public double X { get; set; }
    public double Y { get; set; }
    public string  Extra { get; set; }
}

现在我收集了这些要点:

List<ExtraStringDataPoint> MyList = new List<ExtraStringDataPoint>()
{
    new ExtraStringDataPoint(10,10,"ten"),
    new ExtraStringDataPoint(20, 20, "twenty"),
    new ExtraStringDataPoint(30,30, "thirty")
};

您可以使用 linq 将所有点的 Y 值相加,其中 X 值大于 15,例如:

var bigger_than_15 = from point in MyList
                      where point.X > 15
                      select point;

var total_y = bigger_than_15.Sum(point => point.Y);

所以,回到你的情况。Linq 将根据您的数据网格将包含名称(P 或 F)的列分组到一个组中。p_col是一个临时变量,datagrid_p_f_column应该是列名(或对象中的属性,相同)。分组完成后,它将对所有值求和。在您的情况下 each p,它将求和p.datagrid_value_column,这应该是保存您的数值的列的名称。最后,p_sum将获得名称所在行的值的总和p。冲洗并重复f。比较一下,就是这样。

于 2013-11-08T08:17:48.500 回答