我有一个包含许多列的数据网格。 以下是其中两列。 我需要单独将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) ;
答案 0 :(得分: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 samples。
我们假设我有一个名为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
应该是列名(或对象中的属性,它是相同的)。分组完成后,它将汇总所有值。对于每个p
的情况,它将总和p.datagrid_value_column
,它应该是包含数字值的列的名称。最后,p_sum
将包含名称为p
的行的值的总和。冲洗并重复f
。比较,就是这样。
答案 1 :(得分: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
// for dataGrid View
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
}
答案 2 :(得分: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";
}