У меня есть страница с gridview на ней и выпадающий список, который определяет, сколько элементов на странице отобразит gridview.asp.net dropdownlist не обновляет выбранное значение
Значение pageSize gridview контролируется этим выпадающим списком и сохраняется в файле cookie. Когда пользователь загружает сайт, cookie считывается, чтобы он запоминал, какой размер страницы выбрал пользователь.
У меня есть одна проблема, и, если я выберу другое значение в раскрывающемся списке, он не обновит ни cookie, ни раскрывающийся список. Он возвращается к сохраненному значению.
Это выпадающий список созданный в GridView шаблона пейджера:
<PagerTemplate>
<asp:Table ID="Table3" runat="server" Width="100%">
<asp:TableRow>
<asp:TableCell HorizontalAlign="Left">
<asp:PlaceHolder ID="ph" runat="server"></asp:PlaceHolder>
</asp:TableCell>
<asp:TableCell HorizontalAlign="Right" Width="10%">
Page Size
<asp:DropDownList runat="server" ID="ddlPageSize" AutoPostBack="true"
OnSelectedIndexChanged="ddlPageSize_SelectedIndexChanged" OnLoad="ddlPageSize_Load">
<asp:ListItem>5</asp:ListItem>
<asp:ListItem>10</asp:ListItem>
<asp:ListItem>20</asp:ListItem>
<asp:ListItem>50</asp:ListItem>
<asp:ListItem>100</asp:ListItem>
</asp:DropDownList>
</asp:TableCell>
</asp:TableRow>
</asp:Table>
</PagerTemplate>
и это, где я пытаюсь загрузить значение списка из печенья:
protected void Page_Load(object sender, EventArgs e)
{
string pageSize = "10";
//Try and load the PageSize cookie from the user's machine and default to 10 records if none is found.
if (Request.Cookies["PageSize"] != null)
{
if (Request.Cookies["PageSize"]["Value"] != null)
{
pageSize = Request.Cookies["PageSize"]["Value"];
int _pageSize;
int.TryParse(pageSize, out _pageSize);
gvRecordsList.PageSize = _pageSize;
DropDownList ddlPageSize = (gvRecordsList.BottomPagerRow).FindControl("ddlPageSize") as DropDownList;
ddlPageSize.SelectedIndex = ddlPageSize.Items.IndexOf(new ListItem(pageSize));
}
}
else
gvRecordsList.PageSize = 10;
if (IsPostBack)
{
ApplyPaging();
}
else
{
gvRecordsList.DataSourceID = "RecordsListSqlDataSource";
gvRecordsList.DataBind();
}
}
В выпадающий список индекс изменен код:
protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList ddlPageSize = (gvRecordsList.BottomPagerRow).FindControl("ddlPageSize") as DropDownList;
gvRecordsList.PageSize = int.Parse(ddlPageSize.SelectedValue);
Response.Cookies["PageSize"]["Value"] = ddlPageSize.SelectedValue;
Response.Cookies["PageSize"].Expires = DateTime.Now.AddDays(1d);
}
Когда я перехожу через код SelectedIndexCha Я вижу, что ddlPageSize.SelectedValue всегда содержит значение из файла cookie, 50, хотя я выбираю другое значение.
Я думаю, вопрос в том, где я могу установить индекс выпадающего списка?
DropDownList ddlPageSize = (gvRecordsList.BottomPagerRow).FindControl("ddlPageSize") as DropDownList;
ddlPageSize.SelectedIndex = ddlPageSize.Items.IndexOf(new ListItem(pageSize));
Если я устанавливаю чтение куки в Page_PreRenderComplete я могу почти заставить его работать, за исключением того, я должен изменить выпадающий список дважды для изменения значения. Кажется, что когда он читает cookie, он находит две копии страницы, и я также вижу, что внутри папки Cookies каждый создается каждый новый. Это не так. –
@sd_dracula: Вы пытались изменить логику Page_Load? –