如何在checkBox选择每个数据网格的每个TabPage选择全部时进行动态调用

时间:2012-07-23 20:11:46

标签: c# winforms events datagridview

我添加了动态标签,其中包含具有DataGridCheckBoxColumn的动态数据网格,以及选项卡上的动态复选框,触发选择all for datagrid复选框。

我正试图在这些方面实施一些东西。

private void cbSelectAll_CheckedChanged(object sender, EventArgs e)
{

    if (cbSelectAll.Checked)
    {
        foreach (DataGridViewRow row in relatedPatientsDG.Rows)
        {
            row.Cells[0].Value = true;
        }
    }
    else
    {
        foreach (DataGridViewRow row in relatedPatientsDG.Rows)
        {
            row.Cells[0].Value = false;
        }
    }
}

但是这个方法也是动态的,需要验证选择了哪个tab / datagrid DataGridCheckBoxColumn,因为我在选项卡上动态创建了所有内容。

作为一个例子,如果我有一个名为relatedDG的dataGrid有DataGridColumnCheckBox,那么触发select all的events方法和unselect all就像。我需要进行类似的更改,但对于动态datagridcheckbox,所以没有任何硬编码。

private void cbSelectAllSameVisits_CheckedChanged(object sender, EventArgs e)
{
    if (cbSelectAllSameVisits.Checked)
    {
        foreach (DataGridViewRow row in relatedDG.Rows)
        {
            row.Cells[0].Value = true;
        }

    }
    else
    {
        foreach (DataGridViewRow row in relatedDG.Rows)
        {
            row.Cells[0].Value = false;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您可以利用每一个网格和一个复选框位于同一个标签页上的事实 - 它们都是同一个容器控件的子项。

这使您可以使用一个方法附加到创建时所有复选框的CheckedChanged事件:

private void checkBox_CheckedChanged(object sender, EventArgs e)
{
    CheckBox cb = sender as CheckBox;
    DataGridView dg = cb.Parent.Controls.Cast<Control>()
                        .Where(c => c.GetType() == typeof(DataGridView))
                        .FirstOrDefault() as DataGridView;

    if (dg != null)
    {              
        if (cb.Checked)
        {
            foreach (DataGridViewRow row in dg.Rows)
            {
                row.Cells[0].Value = true;
            }
        }
        else
        {
            foreach (DataGridViewRow row in dg.Rows)
            {
                row.Cells[0].Value = false;
            }
        }           
    }            
}  

该代码使用事件处理程序的sender参数来识别单击的复选框,然后搜索属于第一个DataGridView的父复选框的控件。