0

我在 gridView 中有以下复选框功能-

<Columns>
    <asp:TemplateField>
     <ItemTemplate>
        <asp:CheckBox ID="chkRow" runat="server" OnCheckedChanged="CheckBoxPN_CheckedChanged" AutoPostBack="true" />
     </ItemTemplate>

它为 gridView 中创建的每一行创建一个复选框。

我的问题是,在事件中-

protected void CheckBoxPN_CheckedChanged(Object sender, EventArgs e)
    {

        CheckBox chk = (CheckBox)sender;
        GridViewRow row = (GridViewRow)chk.NamingContainer;  

        int gID = System.Convert.ToInt16(row.Cells[1].Text);

        gridViewDataSource.SelectCommand = sqlCommand + gID;
    }

我正在使用它来检索值。一旦用户检查了一个复选框,然后去检查另一个复选框,之前的复选框状态仍然处于选中状态。

在检查新的复选框时,如何修改代码以取消选中的最后一个复选框?

编辑 @Neil Knight 的答案实现了正确的功能,但是当我使用checked_changed事件时,当新的复选框被选中时,这会触发事件并获得正确的答案。但是,当未选中前一个复选框时,这会再次触发事件并得到错误的答案。如何阻止gID值被旧答案替换?

4

2 回答 2

2

ASP.Net 示例:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>checkboxes</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5"
name="vs_targetSchema">
<script language="javascript">
function SingleSelect(regex,current)
{
re = new RegExp(regex);

for(i = 0; i < document.forms[0].elements.length; i++) {

elm = document.forms[0].elements[i];

if (elm.type == 'checkbox') {

if (re.test(elm.name)) {

elm.checked = false;

}
}
}

current.checked = true;

}
</script>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<table width="100%" align="center">
<tr>
<td>
<br/>aaaa<input type="checkbox" id="chkOne" name="chkOne"
value="aaaa" checked onclick="SingleSelect('chk',this);" />
<br/>bbbb<input type="checkbox" id="chkTwo" name="chkTwo"
value="bbbb" onclick="SingleSelect('chk',this);" />
<br/>cccc<input type="checkbox" id="chkThree" name="chkThree"
value="cccc" onclick="SingleSelect('chk',this);" />
<br/>dddd<input type="checkbox" id="chkFour" name="chkFour"
value="dddd" onclick="SingleSelect('chk',this);" />
<br/>eeee<input type="checkbox" id="chkFive" name="chkFive"
value="eeee" onclick="SingleSelect('chk',this);" />
</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td></td>
</tr>
</table>
</form>
</body>
</HTML>

取自Stephen Cheng的回答。

于 2013-02-01T13:39:02.397 回答
0

您可以使用 XLAnt 建议的单选按钮(请记住将它们放入同一组(您可以使用单选按钮的GroupName="FOO"属性来执行此操作))

或者(如果 Checkbox 是您真正想要使用的)

您可以取消设置所有复选框,除了选中的复选框(非常慢)。

<ItemTemplate>
    <asp:RadioButton ID="chkRow" runat="server" OnCheckedChanged="CheckBoxPN_CheckedChanged" AutoPostBack="true" GroupName="foo"/>
 </ItemTemplate>
于 2013-02-01T13:34:32.040 回答