设置具有相同值的行的所有datagrid单元格的最佳方法

时间:2016-01-12 10:07:05

标签: c# checkbox datagridview filter datagrid

我想改进此代码,其目标是像excel过滤器一样工作。如果所选行的所有复选框均为true,则该函数(由按钮触发)将它们全部设为false,如果它们都是false,则将它们设置为true,并且如果它们中的至少一个是{{1 }}或false,然后它们都变为真实。但我的代码仅在全部truetrue时才有效。另一个条件并不总是有效,这是因为代码的最后一部分没有抛出正确的结果。 复选框位于第3列,从7到19,总共21个。

false

1 个答案:

答案 0 :(得分:0)

如果你想处理行,那么你应该遍历行,然后遍历行的每一列。如果你想处理特定的行,那么你必须访问当前行索引并使用它来访问细胞。

您可以从第一列的值开始,并在迭代时检查它是否发生了变化。如果它改变了,那么调用一个函数来设置所需的值,如果不是在最后调用该函数。

public void seleciona_check()
    {
        bool changed = false; //boolean to see if something changed 
        bool compareTo=(bool)grid_lic.CurrentRow.Cells[3].Value; // take the first value as reference point
        for (int j = 7; j < grid_lic.ColumnCount - 1; j++) // for loop to check
        {
            if ((bool)grid_lic.CurrentRow.Cells[j].Value != compareTo)
            {
                changed = true; 
                SetAllValues(changed);
                break; //no need to go on if there are true and false values
            }
        }
        if (changed == false) SetAllValues ( compareTo );
    }

    public void SetAllValues(bool toSet)
    {
        for (int j = 7; j < grid_lic.ColumnCount - 1; j++) // for loop to check
        {
            grid_lic.CurrentRow.Cells[j].Value = toSet;
        }
    }