Ok, większość z nich są błędne. Phil jest jedynym, który działa. Odpowiedź nie działa. Problem z odpowiedzią Phila polega na tym, że jest on powiązany z SQL DataTable w asp.net, którego nikt nie używa. Cóż, niektórzy tak robią, ale kiedy zaczniecie używać wzorów, które zostaną upuszczone.
Mój przykład zawiera szczegóły powtarzania wiersza po wierszu oraz przełączania indeksu stron i ponownego wiązania. Nie mogłem przeszukać rzeczywistej właściwości DataSource, ponieważ jest ona związana z kontrolką LinqDataSource i nie mogę uzyskać dostępu do rzeczywistych danych. Przeszukiwanie zasobu DataSource prawdopodobnie nie zadziałałoby, ponieważ przeszukujesz, sortujesz itp., Aby zmienić dane i pobieranie rzeczywistego indeksu wiersza nie będzie indeksem siatki (lub innego kontrolnego).
Użyłem ukrytego asp: HiddenControl, aby zachować wartość, ponieważ funkcja jQuery faktycznie wykonuje odświeżenie. grdLocations to gridview
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;
}
Spowoduje to wykonanie iteracji każdej strony w widoku siatki i wybór właściwego klucza danych.
Teraz, aby dodać, jeśli chcesz najprostszy sposób na znalezienie strony na podstawie wiersza, skorzystaj z tej matematyki w tej przykładowej aplikacji konsolowej. To sprawia, że jest to naprawdę proste:
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();
}
}
Mam nadzieję, że to pomoże komuś.
Przydałoby się odrobinę white-space, ale to jest całkiem miłe. – Kirk
Zgadzam się. Dziękuję za komentarz. :-) –
Wszystko, co zrobi ta metoda rozszerzenia, to zawsze zwraca -1. 'DataKeyArray' nie ma metody' IndexOf() ', jedynym powodem kompilacji jest to, że twoja metoda rozszerzenia nosi nazwę IndexOf. Tak więc, gdy zostanie osiągnięta pierwsza linia 'return keys.IndexOf (key)', wywoła ona ponownie tę samą metodę, tylko tym razem parametr 'value' będzie instancją' DataKey'. Co z kolei nie spełni predykatu 'k.Value.Equals (value)' i zwróci -1. Zobacz mój komentarz poniżej, aby zrobić to w jednym wierszu, bez metody rozszerzenia. –