2012-01-09 147 views
1

我有一个窗体包含一个数据绑定到一个数据源,其中包含一个项目列表和一个真/假标志。如果为true,myCheck复选框被选中:C#Checkbox.Checked属性不反映检查更改

<form id="myForm" runat="server"> 
    <asp:Button ID="save" runat="server" Text="Save" OnClick="save_Click" /> 
    <br /> 
    <asp:DataList runat="server" id="myList" onitemdatabound="myList_ItemDataBound"> 
    <HeaderTemplate> 
     <th>Item Name</th> 
     <th id="thCheck" runat="server">Check?</th> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <td id="tdName" runat="server"><%# Eval("Name") %></td> 
     <td runat="server"><asp:CheckBox id="myCheck" runat="server" Checked="false" /></td> 
    </ItemTemplate> 
</asp:DataList> 

在点击保存,我想看看哪些项目已检查。我使用下面通过数据列表中的项目迭代:

protected void save_Click(Object sender, EventArgs e) 
{ 
    String Name; 
    Boolean omit; 

    foreach (DataListItem item in myList.Items) 
    { 
     CheckBox omitCheck = (CheckBox)item.FindControl("myCheck"); 

     if (omitCheck != null) 
     { 
      if (omitCheck.Checked == true) // This line is my problem!! 
      { 
       // do stuff 
      } 
      break; 
     } 
    } 

FindControl似乎工作正常,并返回一个复选框,但该值始终为false,即使我已经检查了一些箱子。如果我在aspx页面中将复选框的值设置为True,则始终为omitCheck.CheckedViewState未被禁用。

我是新来的,所以确定有一个明显的答案。

+0

myList_ItemDataBound函数是什么样的?我怀疑它需要!IsPostback不覆盖回发中输入的值 – Evert 2012-01-09 13:58:45

+0

就是这样,谢谢Evert。添加!IsPostBack检查myList.DataBind()方法已修复它。 – RichardB 2012-01-09 14:04:44

+0

我会把它当作答案,很高兴它有帮助。 :) – Evert 2012-01-09 14:06:14

回答

5

myList_ItemDataBound函数是什么样子的?我怀疑它需要一个!IsPostback不覆盖回发上的输入值