2012-12-03 89 views
0

我有一个datalist包含checkboxlist。如何获取复选框列表未选中项目

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

当我我得到了使用

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

同样选择的价值怎样才能从一个CheckBoxList的值,如果我取消一个从CheckBoxList的检查一个从SelectedIndexChanged事件复选框列表

回答

0

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

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

0

,如果它适合你你可以把jQuery的路线......

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. 
} 
相关问题