ASP.Net Gridview подкачка страниц, всегда индекс страницы == 0 - PullRequest
0 голосов
/ 26 мая 2010

РЕДАКТИРОВАТЬ: сейчас работает, см. Ниже.

Привет всем,

Возникла небольшая проблема с моим приложением ASP.Net 3.5. Я пытаюсь заставить программу узнать, по какому номеру страницы была нажата кнопка. Я использую встроенную в ASP.Net функцию AllowPaging = "True". Это никогда не бывает без кода, поэтому вот оно:

ASP.Net:

<asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333" 
            GridLines="Vertical" Width="960px" AllowSorting="True" 
            EnableSortingAndPagingCallbacks="True" AllowPaging="True" PageSize="25" >
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <EditRowStyle BackColor="#999999" />
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
        </asp:GridView>

C #:

var fillTable = from ft in db.IncidentDatas
                                where ft.pUserID == Convert.ToInt32(ClientList.SelectedValue.ToString())
                                select new
                                {
                                    Reference = ft.pRef.ToString(),
                                    Date = ft.pIncidentDateTime.Value.Date.ToShortDateString(),
                                    Time = ft.pIncidentDateTime.Value.TimeOfDay,
                                    Premesis = ft.pPremises.ToString(),
                                    Latitude = ft.pLat.ToString(),
                                    Longitude = ft.pLong.ToString()
                                };
                if (fillTable.Count() > 0)
                {
                    GridView1.DataSource = fillTable;
                    GridView1.DataBind();
                    var IncidentDetails = fillTable.ToList();
                    for (int i = 0; i < IncidentDetails.Count(); i++)
                    {
                        int pageno = GridView1.PageIndex;
                        int pagenostart = pageno * 25;
                        if (i >= pagenostart && i < (pagenostart + 25))
                        {
                            //Processing
                        }
                    }
                 }

Есть идеи, почему GridView1.PageIndex всегда = 0? Дело в том, что обработка для корректного представления работает правильно ... она всегда будет переходить на правильную страницу подкачки, но всегда равна 0, когда я пытаюсь получить номер. Помогите!

Ответы [ 3 ]

0 голосов
/ 26 мая 2010

Хм ... не бери в голову этот. Я удалил GridView и добавил еще один, добавил событие для PageIndexChanging, затем использовал e.NewPageIndex. По какой-то причине это не позволило бы мне использовать это событие на другом GridView. Weird.

0 голосов
/ 26 мая 2010

Проверьте ваше сообщение обратно, вы, вероятно, загружаете сетку заново при каждой загрузке страницы, поэтому, когда вы создаете страницу, вы, вероятно, вызываете код, который заполняет вашу сетку, и он сбрасывает индекс страницы. Вы должны убедиться, что загружаете его, только если это , а не постбэк, если это постбэк, вам нужно будет извлечь данные и соответствующий pageIndex из области хранения, такой как ViewState и т. Д.

0 голосов
/ 26 мая 2010

Вы пытались получить доступ к GridView1.PageIndex до вызова GridView1.DataBind? Он может быть сброшен при назначении нового источника данных и последующей привязке его к сетке.

...