Ok, la plupart d'entre eux sont faux. Phil est le seul qui fonctionne. La réponse ne fonctionne pas. Le problème avec la réponse de Phil est qu'il est lié à un DataTable SQL dans asp.net, que personne n'utilise. Eh bien, certains le font, mais quand vous commencez à utiliser des modèles de conception qui est abandonnée.
Mon exemple détaille l'exécution ligne par ligne et la commutation de l'index de page et de la reliure. Je ne pouvais pas rechercher la propriété DataSource réelle car elle est liée à un contrôle LinqDataSource et je ne peux pas accéder aux données réelles. Et la recherche dans le DataSource ne fonctionnerait probablement pas parce que vous avez la recherche, le tri, etc. pour changer les données et saisir l'index de la ligne ne sera pas l'index de la grille (ou d'un autre contrôle).
J'ai utilisé un asp caché: HiddenControl pour conserver la valeur car une fonction jQuery exécute réellement la publication. grdLocations est le 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;
}
Cela itérer chaque page dans la vue de la grille et sélectionnez la clé de données correcte.Maintenant, pour ajouter si vous voulez la façon la plus simple de trouver une page basée sur la ligne, utilisez cette mathématique dans cet exemple d'application console. Cela maintient très simple
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();
}
}
Hope this helps quelqu'un.
pourrait utiliser une touche de l'espace blanc, mais c'est plutôt sympa. – Kirk
Je suis d'accord. Merci pour le commentaire. :-) –
Tout ce que cette méthode d'extension fera est toujours de retour -1. 'DataKeyArray' n'a pas de méthode' IndexOf() ', la seule raison pour laquelle elle est compilée est que votre méthode d'extension s'appelle IndexOf. Ainsi, lorsque la première ligne 'return keys.IndexOf (key)' est atteinte, elle appelle de nouveau la même méthode, mais cette fois-ci, le paramètre 'value' sera une instance de' DataKey'. Qui à son tour ne satisfera pas le prédicat 'k.Value.Equals (value)' et retournera -1. Voir mon commentaire ci-dessous pour le faire en une ligne, sans méthode d'extension. –