如何获取复选框列表未选中项目

时间:2012-12-03 12:08:12

标签: c# asp.net visual-studio-2008

我有一个数据列表包含复选框列表。

 <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;

同样如果我从复选框列表中取消选中

,如何从复选框列表中获取值

2 个答案:

答案 0 :(得分:0)

如果取消选中SelectedIndexChangedCheckBox也会被触发。所以它的工作方式相同。但是如果你想知道(现在)未经检查的项目,你必须将旧的选择存储在某个地方,例如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);
}

如果可以选择多个复选框,这甚至可以工作。

答案 1 :(得分: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 Part ....

$(".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.
}