0

我有 4 个复选框。同时,一次检查 1 个,我正在获取其相应的数据网格视图。我想从每个数据网格视图中获取总数并将其存储在文本框中。然后我想显示所有数据网格视图的总和。现在我只从一个数据网格视图中获取值。我该怎么做?

    private void dataGridView1_CellValidated(object sender, DataGridViewCellEventArgs e)
    {
        if (checkBox1.Checked == true)
        {
            if (e.ColumnIndex == 2 || e.ColumnIndex == 3)
            {
                int a = Convert.ToInt32(dataGridView1.CurrentRow.Cells[2].Value);
                int b = Convert.ToInt32(dataGridView1.CurrentRow.Cells[3].Value);


                dataGridView1.CurrentRow.Cells[4].Value = a * b;
               // sum = 0;
                for (int i = 0; i < dataGridView1.Rows.Count; ++i)
                {
                    sum += Convert.ToInt32(dataGridView1.Rows[i].Cells[4].Value);
                }
               // textBox2.Text = sum.ToString();


            }
        }
        else if(checkBox2.Checked==true)
        {
             if (e.ColumnIndex == 2 || e.ColumnIndex == 3)
             {
                int a = Convert.ToInt32(dataGridView1.CurrentRow.Cells[2].Value);
                int b = Convert.ToInt32(dataGridView1.CurrentRow.Cells[3].Value);


                dataGridView1.CurrentRow.Cells[4].Value = a * b;
                // s = 0;
                for (int i = 0; i < dataGridView1.Rows.Count; ++i)
                {
                    s += Convert.ToInt32(dataGridView1.Rows[i].Cells[4].Value);
                }
             }
        }
        else if (checkBox3.Checked == true)
        {
            if (e.ColumnIndex == 2 || e.ColumnIndex == 3)
            {
                int a = Convert.ToInt32(dataGridView1.CurrentRow.Cells[2].Value);
                int b = Convert.ToInt32(dataGridView1.CurrentRow.Cells[3].Value);


                dataGridView1.CurrentRow.Cells[4].Value = a * b;
              //   u = 0;
                for (int i = 0; i < dataGridView1.Rows.Count; ++i)
                {
                    u += Convert.ToInt32(dataGridView1.Rows[i].Cells[4].Value);
                }
            }
        }
        else if(checkBox4.Checked==true)
        {
            if (e.ColumnIndex == 2 || e.ColumnIndex == 3)
            {
                int a = Convert.ToInt32(dataGridView1.CurrentRow.Cells[2].Value);
                int b = Convert.ToInt32(dataGridView1.CurrentRow.Cells[3].Value);


                dataGridView1.CurrentRow.Cells[4].Value = a * b;
                // m = 0;
                for (int i = 0; i < dataGridView1.Rows.Count; ++i)
                {
                    m += Convert.ToInt32(dataGridView1.Rows[i].Cells[4].Value);
                }
            }
        }
4

1 回答 1

2

您只执行 if 表达式计算结果为 true 的第一个代码块。删除其他块中的 else ,以便也可以评估表达式。仅当 if-block 评估为 false 时才执行 else-block。

If (checkBox1.Checked)
{
     // Your stuff
}
If (checkBox2.Checked)
{
     // Your stuff
}
If (checkBox3.Checked)
{
     // Your stuff
}
If (checkBox3.Checked)
{
     // Your stuff
}

请注意,您可以将支票写得更短一些。您可以省略该= true部分。

编辑

执行上述操作时,您确实会在Your stuff每次取消选中并再次选中复选框时执行。

有 2 种可能性来实现所需的行为:

选项 1:取消选中该框时删除列:

If (checkBox1.Checked)
{
     // Add columns
}
else
{
    // Remove columns
}

If (checkBox2.Checked)
{
   // Add columns
}
else
{
  // Remove columns
}

选项2:检查列是否存在。即使未选中复选框,这也会将列保持在原位,但不会添加新的列(如果它们已经存在)。

If (checkBox1.Checked) && ( columns are not present)
{
     // Add columns
}

If (checkBox2.Checked) && ( columns are not present)
{
   // Add comlumns
}

在这两种情况下,您最多将获得 2 个其他列。

于 2013-11-04T07:08:48.873 回答