2011-12-09 28 views
1

我有一个中继器,里面有一个复选框。现在我想根据列值(0/1)来检查它。我已经通过中继器的itemDataBound事件尝试过了。如果行的值为1,那么它在做什么,然后检查所有的复选框,如果第一个复选框没有被选中,那么它的未选中的全部。 我的代码是: - ` 如何根据值在绑定时间检查中继器内的复选框?

    <td align="center"> 
         <asp:CheckBox ID="chk" runat="server" /> 
        </td> 
       </tr> 
      </ItemTemplate> 
     </asp:Repeater>` 

该事件的ItemDataBound代码为: -

protected void rp_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    DataTable dt = new DataTable(); 
    dt = obj.abc(id); 
    if (dt.Rows.Count > 0) 
    { 
     CheckBox chk = (CheckBox)(e.Item.FindControl("chk")); 
     if (chk != null) 
     { 

      if (Convert.ToInt32(dt.Rows[0]["xyz"]) == Convert.ToInt32("0")) 
      { 
       chk.Checked = false; 
      } 
      else 
      { 
       chk.Checked = true; 

      } 
     } 

    } 

} 

回答

3

有很多方法可以做到这一点。

  1. 您可以编写内联ASP.NET:

    <asp:CheckBox id='isMarried' runat='server' 
    Checked='<%# Convert.ToBool(Eval("IsMarried")) ? true : false %>' /> 
    
  2. 正如你所提到的,你可以使用repeater_ItemDataBound找到每一行的复选框,并相应地设置其值为:

    protected void repeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
        Person person = (Person)e.Item; // e.Item is the datasoruce of the row 
        if (person.IsMarried) 
        { 
         CheckBox isMarried = (CheckBox)(e.Item.FindControl("isMarried")); 
         isMarried.Checked = true; 
        } 
    } 
    
  3. 另一种方式是将隐藏字段中的布尔状态(这里是婚姻状态)注入并发送给客户端,然后在客户端使用jQuery(或其他JavaScript框架),根据这些隐藏字段的值更新复选框的选中状态:

+0

我不知道这是关于较新版本的东西,而是在Visual Studio for Mac上需要: Person person =(Person)e.Item.DataItem; 或 var person =(Person)e.Item.DataItem; –

相关问题