代码之家  ›  专栏  ›  技术社区  ›  Jason

复选框OnClick/ItemCommand in Repeater or DataList

  •  5
  • Jason  · 技术社区  · 15 年前

    3 回复  |  直到 15 年前
        1
  •  9
  •   Daniel Dyson    15 年前

    这里是一个快速模拟我如何做了类似的过去。

        <asp:Repeater id="repeater1" runat="server" OnItemDataBound="repeater1_OnItemDataBound" >
            <ItemTemplate>
                <asp:CheckBox ID="chk" runat="server" OnCheckedChanged="Check_Changed" AutoPostBack="true" />
            </ItemTemplate>
        </asp:Repeater>
    

    代码隐藏:

        public class Model {
            public int Id { get; set; }
            public string Name { get; set; }
        }
    
        public partial class Checkboxes : System.Web.UI.Page {
            protected void Page_Load(object sender, EventArgs e) {
                if(!IsPostBack ) {
                    repeater1.DataSource = new List<Model> { 
                                   new Model { Id = 1, Name = "a" }, 
                                   new Model { Id = 2, Name = "b" }, 
                                   new Model { Id = 3, Name = "c" } };
                    repeater1.DataBind();
                }
            }
    
            protected void repeater1_OnItemDataBound(Object sender, RepeaterItemEventArgs e) {
                if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
                    var item = e.Item.DataItem as Model;
                    if (item != null) {
                        var chk = e.Item.FindControl("chk") as CheckBox;
                        if (chk != null) {
                            chk.Text = item.Name;
                            chk.InputAttributes.Add("value", item.Id.ToString());
                        }
                    }
                }
            }
    
            protected void Check_Changed(Object sender, EventArgs e) {
                var id = ((CheckBox) sender).InputAttributes["value"];
                //you now have access to the item id and can manipulate at will.
            }
        }
    
        2
  •  2
  •   Jørgen Helgheim    13 年前

    请尝试此代码隐藏:

     protected void Checked_Changed(object sender, EventArgs e)
            {
                var item = ((CheckBox)sender).Parent as RepeaterItem;
    // now you have the repeater row. You can travers further up the controls if you use Parent.Parent...
    
            }
    
        3
  •  -1
  •   Brett    15 年前

    可以使用OnClick事件循环遍历中继器中的每个项,并检查每个复选框的值(IsChecked==true)。

    只要确保没有在中继器上调用“DataBind()”,否则可能会导致问题。