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 事件中的复选框列表中选中一个时,我使用了选定的值

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

同样,如果我从复选框列表中取消选中一个,如何从复选框列表中获取值

4

2 回答 2

0

如果适合您,您可以选择 jQuery Route...

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

在您的表单上放置一个带有样式显示的按钮:无。还有一个隐藏字段来跟踪当前选中的复选框。

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