Флажок OnClick / ItemCommand в Repeater или DataList - PullRequest
5 голосов
/ 25 августа 2010

Мне нужно выполнить некоторые логические действия на стороне сервера в моем репитере, когда внутри элемента управления репитера нажата кнопка CheckBox.

Кто-нибудь знает, как это сделать?

На мой взгляд, вы не можете запустить команду элемента, и если вы используете CheckBoxes OnClick, вы не можете получить строку повторителя.

Ответы [ 3 ]

9 голосов
/ 25 августа 2010

Вот краткий макет того, как я делал подобное в прошлом.

    <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 голосов
/ 25 апреля 2013

Попробуйте этот код:

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

        }
0 голосов
/ 25 августа 2010

Вы можете использовать событие OnClick для циклического прохождения каждого элемента в повторителе и проверки значения каждого флажка (IsChecked == true).

Просто убедитесь, что вы не вызываете «DataBind»() "на повторителе, в противном случае это может вызвать проблемы.

...