【问题标题】:One checkBox to be checked一个要检查的复选框
【发布时间】:2013-02-01 23:01:25
【问题描述】:

我在 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 事件时,当新的 checkBox 被选中时,这会触发事件并获得正确的答案。然而,当前一个复选框未被选中时,这会再次触发事件并得到错误的答案。如何阻止 gID 值被旧答案替换?

【问题讨论】:

  • 使用单选按钮而不是复选框,它们适用于这种用途
  • 在使用单选按钮时会发生完全相同的事情,因为之前的选择始终处于选中状态。

标签: c# asp.net gridview


【解决方案1】:

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的回答。

【讨论】:

  • 这是正确的功能,但是给我带来了一个问题,因为它过度写入了正确的值。查看修改。
  • @Jambo 使用这个,但在事件处理程序中确保使用var chk = sender as CheckBox; if (chk.Checked) { ... }
  • 对它进行了排序@Destrictor
【解决方案2】:

您可以按照 X.L.Ant 的建议使用单选按钮(请记住将它们放在同一个组中(您可以使用单选按钮的 GroupName="FOO" 属性执行此操作)

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

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

<ItemTemplate>
    <asp:RadioButton ID="chkRow" runat="server" OnCheckedChanged="CheckBoxPN_CheckedChanged" AutoPostBack="true" GroupName="foo"/>
 </ItemTemplate>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多