anthasaurus Ответов: 3

Выпадающий список внутри ListViewItem


Привет,

Проблема
У меня есть проблема с использованием DropDownList управление внутри а ListView - когда выбранный индекс DropDownList меняется, то OnItemCommand событие года ListViewItem это не увольнение.

Я не уверен, правильно ли я настраиваю элементы управления, поэтому буду признателен за любой совет.

Дополнительные подробности
У меня есть DropDownList внутри ItemTemplate для ListView, определенный в моем aspx.

Когда пользователь выбирает другой индекс в поле DropDownList, Я хочу выполнить обратную передачу и захватить вновь выбранный DropDownList индекс, а также ListViewItem что содержит указанные DropDownList.

Чтобы достичь этого, я устанавливаю AutoPostBack собственность компании DropDownList к "истине" и пытаюсь захватить то ListViewItem в OnItemCommand команда ListView.

Отладка показывает, что обратная передача происходит, но OnItemCommand событие не запускается.

Возможно, стоит также отметить, что я НЕ добавление DropDownList к ListView элементы управления в событии ItemCreated на сервере, так как это приводит к DropDownList для рендеринга за пределами ListViewItem и это не улучшает проблему. Я могу только предположить, что делаю это неправильно, или есть что-то, что я упускаю из виду.

Пожалуйста, кто-нибудь может посоветовать?

Спасибо

3 Ответов

Рейтинг:
2

Monjurul Habib

Поймать его на ListView ItemDataBound

Пожалуйста не копировать и вставлять, попробуем разобраться.

пример.aspx-файл

<asp:listview id="ListView1" runat="server" onitemdatabound="ListView1_ItemDataBound" xmlns:asp="#unknown">
        DataSourceID="SqlDataSource1" ItemPlaceholderID="SqlItemContainer" DataKeyNames="cid"&gt;
.......................
 <itemtemplate>
            <asp:dropdownlist id="ddl" runat="server" autopostback="true" onselectedindexchanged="ddl_SelectedIndexChanged">
                <asp:listitem text="Select 1" value="One" selected="True">Review</asp:listitem>
                <asp:listitem text="Select 2" value="Two">Send Back to Level1</asp:listitem>
            </asp:dropdownlist>
        </itemtemplate>
<asp:label id="ddlval" text="" runat="server"></asp:label&gt;


...........................

пример.в CS

protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
    {
        ddlval.Text = ((DropDownList)sender).SelectedValue;
    }
    protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
        if (Page.IsPostBack)
        {
            if (e.Item.ItemType == ListViewItemType.DataItem)
            {
                DropDownList ddl = e.Item.FindControl("ddl") as DropDownList;
                ddl.SelectedIndexChanged += new EventHandler(ddl_SelectedIndexChanged);

            }
        }


anthasaurus

Спасибо Монжурулу и Абхишеку,

Я проверил ваше предложение, но, похоже, мне от этого не легче. Это заставляет меня задуматься, не потому ли это, что я не добавляю элемент управления DropDownList в коллекцию элементов управления в ListViewItem должным образом?

ЛВИ элементы listviewitem = е.Пункт;
Dropdownlist для ДДЛ = (dropdownlist для)Эл.Товар.FindControl("ddl");
lvi.управление.Добавить(ddl);

Я попробовал приведенный выше код, который я добавил В событие ItemCreated ListView, а также событие ItemDataBound, и ни один из методов не устраняет проблему, связанную с тем, что событие ItemCommand не срабатывает для ListView.

Интересно, не происходит ли здесь чего-нибудь более зловещего?!

Рейтинг:
2

Manas Bhardwaj

Вы должны скорее захватить SelectedIndexChanging [^]или Разделе мы рассмотрим [^]событие.


anthasaurus

Спасибо за ваш ответ Манас,

Я не уверен, что это был бы правильный способ сделать это - как можно было бы получить DataItem для ListViewItem, к которому принадлежит DropDownList?

Событие SelectedIndexChanging/Changed server только передает 'EventArgs' в качестве параметра обратно на сервер, но DataItem ListView не может быть получен из этого.

Рейтинг:
2

JIYAUL MUSTAPHA

protected void dropdownlist1_SelectedIndexChanged(object sender, EventArgs e)
   {
       DropDownList ddlListFind = (DropDownList)sender;
       ListViewItem item1 = (ListViewItem)ddlListFind.NamingContainer;
       DropDownList getDDLList = (DropDownList)item1.FindControl("dropdownlist1");

       Label lblMessage = (Label)item1.FindControl("lblMsg");
       lblMessage.Visible = true; lblMessage.Text = "dropDown text is : " + getDDLList.SelectedItem.Text + " and value is : " + getDDLList.SelectedItem.Value;
   }