我仍然是C#初学者,我试图计算status_id
中有多少个'1',然后根据status_id用1或4或5来计数dept_id
所以基本上'status_id'如果'1'表示它是开放的,我想知道它在哪个部门中的开放。
但是,如果条件不起作用。
private void button2_Click(object sender, EventArgs e)
{
var count = this.dataGridView1.Rows.Cast<DataGridViewRow>()
.Count(row => row.Cells["status_id"].Value.ToString() == "1");
if (dataGridView1.Rows[count - 1].Cells["status_id"].Value.ToString() == "1")
{
var general = this.dataGridView1.Rows.Cast<DataGridViewRow>()
.Count(row => row.Cells["dept_id"].Value.ToString() == "1");
this.textBox2.Text = general.ToString();
}
这是第一部分“常规”代码的示例,其余部分与“财务”和“技术”代码相同
答案 0 :(得分:2)
让我们尝试一下。
private void button2_Click(object sender, EventArgs e)
{
//get all rows in your dataGrid that have a 1 in status_id
var foundRows = this.dataGridView1.Rows.Cast<DataGridViewRow>().Where(row => row.Cells["status_id"].Value.ToString() == "1");
//get the count of the found rows
var count = foundRows.Count();
//in the foundRows search further/deeper for rows that have a 1 in dept_id - this will give rows that have both status_id = 1 AND dept_id = 1
var foundChildRows = foundRows.Where(row => row.Cells["dept_id"].Value.ToString() == "1");
//get the count of the found"Child"Rows
var childCount = foundChildRows.Count();
this.textBox2.Text = childCount.ToString();
}
答案 1 :(得分:0)
您的逻辑似乎让我很奇怪:在第一行中,您对状态等于1的行进行计数。例如,您发现3个具有该状态的行。
然后将行置于找到的计数的位置(因此,在我的示例中,您将获得第三行),并且如果该行的状态等于1,则在if块中执行代码(用dept_id等于1)。
我不太了解您要做什么,但是我想您不想引用第n行,其中n是基于状态计数的?