0

チェックボックスリストを含むデータリストがあります。

 <asp:DataList ID="dtlstfilter" runat="server">
 <ItemTemplate>
 <asp:CheckBoxList ForeColor="Gray"  AutoPostBack="true"    OnSelectedIndexChanged="chklist_SelectedIndexChanged" ID="chklist"
 runat="server">
</asp:CheckBoxList>
</ItemTemplate>
</asp:DataList>

SelectedIndexChangedイベントのチェックボックスリストから1つをチェックすると、選択した値を取得しました

CheckBoxList c = (CheckBoxList)sender;
string selectedvalue= c.SelectedValue;

同様に、チェックボックスリストからチェックを外した場合、チェックボックスリストから値を取得する方法

4

2 に答える 2

0

SelectedIndexChangedチェックを外すと、 も起動しますCheckBox。したがって、同じように機能します。しかし、(現在)チェックされていないアイテムを知りたい場合は、古い選択をどこかに保存する必要がありますViewState

private IEnumerable<string> SelectedValues
{
    get
    {
        if (ViewState["SelectedValues"] == null && dtlstfilter.SelectedIndex >= -1)
        {
            ViewState["SelectedValues"] = dtlstfilter.Items.Cast<ListItem>()
                .Where(li => li.Selected)
                .Select(li => li.Value)
                .ToList();
        }else
            ViewState["SelectedValues"]  = Enumerable.Empty<string>();

        return (IEnumerable<string>)ViewState["SelectedValues"];
    }
    set { ViewState["SelectedValues"] = value; }
}

protected void chklist_SelectedIndexChanged(Object sender, EventArgs e)
{
    CheckBoxList c = (CheckBoxList)sender;
    var oldSelection = this.SelectedValues;
    var newSelection = c.Items.Cast<ListItem>()
                .Where(li => li.Selected)
                .Select(li => li.Value);
    var uncheckedItems = newSelection.Except(oldSelection);
}

複数のチェックボックスを選択できる場合でも、これは機能するはずです。

于 2012-12-03T12:28:38.297 に答える
0

それがあなたに合っているなら、あなたはjQueryルートを取ることができます...

if (!IsPostBack)
{
    foreach (ListItem item in chkList.Items)
    {
        //adding a dummy class to use at client side.
        item.Attributes.Add("class", "chkItem");
    }
}

style display : none を使用して、フォームにボタンを 1 つ配置します。そして、現在チェックされているチェックボックスを追跡する隠しフィールド。

<asp:Button ID="hdnButton" runat="server" style="display:none;" OnClick="hdnButton_Click"/>
<asp:HiddenField ID="hdnCurrent" runat="server" />

jQueryの部分....

$(".chkItem input:checkbox").change(function(){            
    $("#hdnCurrent").val($(this).attr("id") + "|" + $(this).attr("checked"));
    $("#hdnButton").click();
});

バックエンドで文字列操作を行いたくない場合は、さらに隠しフィールドを使用できます。あなたの好みによります。

次に、以下のようにボタン クリック イベントを処理します。

protected void hdnButton_Click(object sender, EventArgs e)
{
    String[] Value = hdnCurrent.Value.Split('|');

    if (Value[1] == "true")
    {
        //Do operations here when the check box is checked
    }
    else
    { 
        //Do operations here when the check box is unchecked
    }

    //Value[0] contains the id of the check box that is checked/unchecked.
}
于 2012-12-03T13:11:40.850 に答える