C#datagridview'if'条件基于前一列的计数不起作用

时间:2018-10-05 12:35:21

标签: c# datagridview

我仍然是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();
    }

这是第一部分“常规”代码的示例,其余部分与“财务”和“技术”代码相同

Example of script

2 个答案:

答案 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是基于状态计数的?