Хорошо, большинство из них не правы. Фил единственный, кто работает. Ответ не работает. Проблема с ответом Фила в том, что он привязан к SQL DataTable в asp.net, который никто не использует. Ну, некоторые делают, но когда вы начинаете использовать шаблоны проектирования, это сбрасывается.
В моем примере показано итерация строки за строкой, переключение индекса страницы и повторное связывание. Я не смог найти фактическое свойство DataSource, потому что оно связано с элементом управления LinqDataSource, и я не могу получить к фактическим данным. И поиск в DataSource, вероятно, не сработает в любом случае, потому что у вас есть поиск, сортировка и т. Д. Для изменения данных и получения фактического индекса строки, а не индекса сетки (или другого элемента управления).
Я использовал скрытый asp: HiddenControl, чтобы сохранить значение, потому что функция jQuery фактически выполняет обратную передачу. grdLocations - это сетка
grdLocations.SelectedIndex = -1;
bool found = false;
int index = 0;
int pageIndex = 0;
for (int i = 0; i < grdLocations.PageCount; i++)
{
for (index = 0; index < grdLocations.DataKeys.Count; index++)
{
if (Convert.ToInt32(grdLocations.DataKeys[index].Value.ToString()) == Convert.ToInt32(hidCurrentRigId.Value))
{
found = true;
break;
}
}
if (found)
break;
pageIndex++;
grdLocations.PageIndex = pageIndex;
grdLocations.DataBind();
}
if (found)
{
grdLocations.PageIndex = pageIndex;
grdLocations.SelectedIndex = index;
}
Это будет повторять каждую страницу в виде сетки и выбирать правильный ключ данных.
Теперь, чтобы добавить, если вы хотите самый простой способ найти страницу, основанную на строке, используйте эту математику в этом примере консольного приложения. Это очень просто
class Program
{
static void Main(string[] args)
{
int rowIndex = 27;
int pageCount = 7;
int currentPage = 3;
int pageSize = 10;
Console.WriteLine("Page = " + (rowIndex / pageSize).ToString());
Console.WriteLine("Row = " + ( rowIndex % pageSize).ToString());
Console.ReadLine();
}
}
Надеюсь, это кому-нибудь поможет.