【发布时间】:2016-08-22 22:29:19
【问题描述】:
我想对复选框进行编程,以便如果选择了一行,程序将读取 gridview 行的第一列中的值,并自动检查在其第一列中也具有该值的所有行。我能够使用一个数组来存储值并遍历每一行,检查这个值是否匹配。如果匹配,则选中该复选框。这行得通,但这是一个非常有限的解决方案。当我尝试反转操作时,它只是自动重新检查该值,因为该值仍在数组中,我不知道如何区分检查或取消检查操作。它完全基于变更事件。
int count = 0;
foreach (GridViewRow gvrow in GridView1.Rows)
{
CheckBox chk = (CheckBox)gvrow.FindControl("chkRow");
if (chk.Checked)
{
count++;
}
}
string [] dnum = new string[count];
int counter = 0;
foreach (GridViewRow row in GridView1.Rows)
{
CheckBox myCheckBox = row.FindControl("chkRow") as CheckBox;
if (myCheckBox.Checked)
{
if (counter > 0)
{
int number = counter - 1;
if (row.Cells[1].Text != dnum[number])
{
dnum[counter] = row.Cells[1].Text;
counter++;
}
}
else
{
dnum[counter] = row.Cells[1].Text;
counter++;
}
}
}
return dnum;
}
数组 dnum 应该返回检查行的第一列值。有了这个,我可以遍历每一行并检查是否需要检查任何复选框。
foreach (GridViewRow gvrow in GridView1.Rows)
{
CheckBox ChkBox = (CheckBox)gvrow.FindControl("chkRow");
if (ChkBox.Checked == true)
{
foreach (string s in first)
{
if (gvrow.Cells[1].Text == s)
{
ChkBox.Checked = true;
}
}
}
但是现在我无法弄清楚如何反转该过程,即当我取消选中一个时,所有具有相同第一列值的都必须取消选中,而不是重新检查,因为该值仍在数组中。我对完全不同的方法持开放态度。
非常感谢, 尼古拉斯
【问题讨论】:
标签: c# asp.net gridview checkbox