SelectedIndexChange没有在asp.net中触发

时间:2013-12-02 13:33:52

标签: c# asp.net gridview

我在asp.net中使用dropdownlist,其中包含10,20,50个值。

我使用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时,selectedindex就会被触发。

有什么问题?

以下是更新.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>

4 个答案:

答案 0 :(得分:1)

问题:,因为您的商品订单为10,20,50...etc.,,我们会清除10位于第一个位置,并选择10first } selection Index不会被更改。

原因: IndexChanged仅在SelectedItem Index更改时触发事件。 当您选择其他项目2050然后选择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>

答案 1 :(得分:0)

问题在于不了解何时可以触发此事件..只有在下拉列表的索引发生更改且在您的情况下没有发生时才会触发它,因为下拉列表呈现的第一个元素是10. / p>

根据我的拙见,根据该问题的最佳解决方案是在页面中使用引物默认选择呈现下拉列表:

<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); 
}

答案 2 :(得分:-1)

将ViewStateMode =“Enabled”添加到它应该工作的DropDownList。

答案 3 :(得分:-1)

我经常从这里获得信息。

这次我只是想分享一下我的经历,并希望有一天能帮到某人。

我在GridView的PagerTemplate中有一个DropDownList。

我使用了http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.pagertemplate(VS.80).aspx

中的示例代码

我在很多页面中都使用过它。一切都正常,除了一个。

OnSelectedIndexChanged事件只是在那一页中没有被触发。

稍后我将该GridView的“EnableViewState”设置为false,它最终起作用。