我添加了动态标签,其中包含具有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;
}
}
}
答案 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的父复选框的控件。