Чтобы ответить больше на ответ @ adam0101, что я думаю он подразумевает под "... Оказывается, мой пользовательский источник данных возвращал ноль для количества записей ." что вам, возможно, потребуется « повторно присоединить » к источнику данных к представлению таблицы. ASP.net автоматически знает, что вы получаете запись «-n», где «n» - это следующий первый ряд следующей страницы. Это решение больше подходит для случаев, когда вы не хотите, чтобы asp.net автоматически обрабатывал данные в вашем сеточном представлении, возможно, из-за необходимости загружать данные после другого события (например, кнопка LOAD DATA), а не когда страница загружена в первый раз. Но, как упомянул Адам ниже, настоящей причиной было то, что он «... создал подкласс источника данных, который унаследовал ObjectDataSource, но он был реализован неправильно». Извините за моё предположение, Адам. Спасибо
Однако остальная часть моего решения, я думаю, будет работать для тех, кто застрял на использовании источников данных, полученных вручную.
т
Установите свой GridView, как указано выше, и обратите внимание - без свойства DataSource! Вот мой пример:
<asp:GridView ID="gvStudents" DataKeyNames="StudentID" runat="server"
ShowFooter="True" AutoGenerateColumns="False" Width="100%" AllowSorting="True" AllowPaging="true" PageSize="10" OnPageIndexChanging="gvStudents_PageIndexChanging">
Затем создайте закрытый метод или подпрограмму, к которым вы можете обращаться, когда вам когда-либо понадобится принудительно отобразить сетку на новой странице.
private void BindGridViewServer(GridView gv1)
{
gv1.DataSource = sdsStudents; //re-attach the datasource
gv1.DataBind(); //get a page of data AllowPaging must be true
}
Затем создайте метод OnPageIndexChanging
:
protected void gvStudents_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView myGV = (GridView)sender;
myGV.PageIndex = e.NewPageIndex;
BindGridViewServer(myGV);
}
Для завершения этого ответа, вот мой код, в который я загружаю данные, когда хочу, а не когда запускается PostPack, что по умолчанию ...
protected void btnSEARCH(object sender, EventArgs e)
{
//some code
//bind the gridview to the datasource here and then bind!
gvStudents.DataSource = sdsStudents;
gvStudents.DataBind();
//more code etc
}