Та же проблема здесь. Однако я не использую элемент управления SPGridViewPager
. Я просто звоню .PageIndex = e.NewPageIndex;
Оба типа Integer. Я делаю назначение в методе PageIndexChanging(object sender, GridViewPageEventArgs e)
.
Не уверен, что происходит в данный момент. Я смотрю на это в Reflector в данный момент.
Мне было интересно, используете ли вы DataKeys? Похоже, здесь происходит 2 приведения. Смотри ниже.
public override void set_PageIndex(int value)
{
int pageIndex = this.PageIndex;
DataKeyArray dataKeys = this.DataKeys;
base.PageIndex = value;
if (pageIndex != this.PageIndex)
{
this.PreviousPageIndex = pageIndex;
if ((dataKeys == null) || (dataKeys.Count <= 0))
{
this.PreviousPageFirstRowDataKey = null;
this.PreviousPageLastRowDataKey = null;
}
else
{
**this.PreviousPageFirstRowDataKey = (string) dataKeys[0].Value;
this.PreviousPageLastRowDataKey = (string) dataKeys[dataKeys.Count - 1].Value;**
}
}
}
Чтобы это исправить, мне пришлось более внимательно посмотреть на мой источник данных и ключи данных. У меня есть набор записей, которые возвращаются с SQL Server, и я привязывал их к POCO. Этот класс имеет несколько открытых свойств типа Integer. Эти целые числа были моими ключами данных в сетке. Вместо этого я заменил их тип на строку, чтобы обойти проблему приведения.
Надеюсь, это имеет смысл. Это исправило это для меня.