2013-12-02 3 views
1

Я использую dropdownlist в asp.net, который содержит 10,20,50 в качестве значений.SelectedIndexИзменить не стрелять в asp.net

Я использую gridview для отображения dataretrieve из таблицы на основе значения, выбранного в раскрывающемся списке.

Пример, когда я выбираю 20, gridview должен отображать только 20 строк. Я использую следующую кодировку;

protected void ddlRowPerPage_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     TextBox txtCurrentPage = sender as TextBox; 
     DropDownList ddlRowPerPage = sender as DropDownList; 
     int startRowIndex = 0; 
     pager.PageSize = Convert.ToInt32(ddlRowPerPage.SelectedValue); 
     Response.Cookies[hdnRowPerPageName .Value].Value = pager.PageSize.ToString(); 
     pager.SetPageProperties(startRowIndex, Convert.ToInt32(ddlRowPerPage.SelectedValue), true);   
    } 

У меня 30 строк в таблице.

Моя проблема, когда я выбираю 50, она показывает все строки. Но когда я выбираю 10, функция SelectedIndex не срабатывает.

В то же время после выбора 50, когда я выбираю 20, вызывается выбранный индекс.

В чем проблема?

Вот обновления .aspx страницы кодирования:

<div class="pull-left"> 
          <asp:DropDownList ID="ddlRowPerPage" runat="server" OnSelectedIndexChanged="ddlRowPerPage_SelectedIndexChanged" 
           EnableViewState="true" AutoPostBack="true" Width="60px" > 
           <asp:ListItem Value="10">10</asp:ListItem> 
           <asp:ListItem Value="20">20</asp:ListItem> 
           <asp:ListItem Value="50">50</asp:ListItem> 

          </asp:DropDownList> 
          rows per page 
         </div> 
+0

Значение '10' вашего значения по умолчанию? Вы привязываете «DropDownList» к обратной передаче (например, в «Page_Load»)? Вы использовали отладчик, чтобы узнать, вызвано ли событие? –

+0

Нет, 20 значение по умолчанию .. Я попробовал его, изменив его на 10. Также в это время и его не стреляли .. Я, я использовал отладчик .. Это я говорю, что он не стреляет .. – Sakthi

+0

@Sakthi: what это порядок вашего заказа 'DropDownList Items'? это '10,20,30'? –

ответ

1

Проблема: как ваши заказ деталей 10,20,50...etc., он очищается, что 10 находится на первом месте, и когда вы выбираете 10, как first выбор Index не будут изменены.

Причина:IndexChanged событие только пожары, когда SelectedItemIndex изменяется. ut, когда вы выберете другой пункт 20 или 50, а затем выберите 10, он определенно срабатывает.

Решение:

Добавить по умолчанию элемент в DropDownList, как --Select Item-- так, что всякий раз, когда пользователь выбирает пункт 10 он запускает событие, как Selected Index изменяется.

Попробуйте:

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" Height="28px" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" Width="201px"> 
    <asp:ListItem>-Select Item-</asp:ListItem> 
    <asp:ListItem>10</asp:ListItem> 
    <asp:ListItem>20</asp:ListItem> 
    <asp:ListItem>50</asp:ListItem> 
</asp:DropDownList> 
+0

@Downvoter: не могли бы вы объяснить проблему? –

+0

он сказал, что он изменил выбранный пункт –

+0

Когда я выбираю 10, после выбора 20, он срабатывает. Но когда я выбираю 10, после выбора 50, его не срабатывают. – Sakthi

-1

Добавить ViewStateMode = "Включено" в DropDownList он должен работать.

+1

« EnableViewState »из« ViewStateMode ». .? Потому что свойство ViewStateMode недоступно .. Я уже установил EnableViewState = true. – Sakthi

0

Проблема в не понимая, когда это событие может быть уволен .. он может стрелять только когда индекс DropDownList изменилось, и это не произошло в вашем случае, потому что первый элемент, когда DropDownList оказывается 10.

по моему скромному мнению, оптимальное решение по этому вопросу является оказание DropDownList на странице с возможностью выбора на грунтовку по умолчанию так:

<div class="pull-left"> 
    <asp:DropDownList ID="ddlRowPerPage" runat="server" OnSelectedIndexChanged="ddlRowPerPage_SelectedIndexChanged" 
     EnableViewState="true" AutoPostBack="true" Width="60px" AppendDataBoundItems="true"> 
     <asp:ListItem Value="0">--Choose--</asp:ListItem> 
     <asp:ListItem Value="10">10</asp:ListItem> 
     <asp:ListItem Value="20">20</asp:ListItem> 
     <asp:ListItem Value="50">50</asp:ListItem> 
    </asp:DropDownList> 
    rows per page 
</div> 

protected void ddlRowPerPage_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    TextBox txtCurrentPage = sender as TextBox; 
    DropDownList ddlRowPerPage = sender as DropDownList; 
    int startRowIndex = 0; 
    pager.PageSize = Convert.ToInt32(ddlRowPerPage.SelectedValue); 
    Response.Cookies[hdnRowPerPageName.Value].Value = pager.PageSize.ToString(); 
    pager.SetPageProperties(startRowIndex, Convert.ToInt32(ddlRowPerPage.SelectedValue), true); 
} 
-1

Я получил информацию отсюда довольно часто.

Я просто хочу поделиться своим опытом на этот раз и надеяться, что когда-нибудь он сможет кому-то помочь.

У меня есть DropDownList в PagerTemplate GridView.

Я использовал пример кода из http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.pagertemplate(VS.80).aspx

Я использовал его во многих моих страницах. Все работает отлично, кроме одного.

Событие OnSelectedIndexChanged просто не запускается на этой странице.

Позже я установил «EnableViewState» этого GridView в false, он работает окончательно.

Смежные вопросы