0

gridView に次の checkBox 関数があります。

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

gridView で作成されたすべての行に対して checkBox を作成します。

私の問題は、イベントで-

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 がチェックされると、イベントが発生し、正しい回答が得られます。ただし、前の checkBox がオフになると、これが再びイベントを発生させ、間違った回答を取得します。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>

スティーブンチェンの答えから取られました。

于 2013-02-01T13:39:02.397 に答える
0

XLAnt で提案されているように、ラジオ ボタンを使用できます (それらを同じグループにすることを忘れないでください (GroupName="FOO"ラジオ ボタンのプロパティでこれを行います))。

代わりに(チェックボックスが本当に使いたいものである場合)

選択されたもの(非常に遅い)を除いて、すべてのチェックボックスの設定を解除できます。

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