Ok, la mayoría de los que están equivocados. Phil es el único que trabaja. La respuesta no funciona. El problema con la respuesta de Phil es que está vinculado a una SQL DataTable en asp.net, que nadie usa. Bueno, algunos lo hacen, pero cuando comienzas a usar patrones de diseño que se descartan.
Mi ejemplo detalla iterar fila por fila y cambiar el índice de página y volver a enlazar. No pude buscar la propiedad real de DataSource porque está vinculada a un control LinqDataSource y no puedo acceder a los datos reales. Y buscar el DataSource probablemente no funcione de todos modos porque tiene que buscar, ordenar, etc. para cambiar los datos y tomar su índice de fila real no será el índice de la cuadrícula (u otro control).
Utilicé un ASP oculto: HiddenControl para mantener el valor porque, en realidad, una función jQuery ejecuta la devolución de datos. grdLocations es la vista de cuadrícula
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;
}
Esto iterará cada página en la vista de cuadrícula y seleccionará la clave de datos correcta.
Ahora, para agregar, si desea la forma más fácil de encontrar una página basada en la fila, utilice esta matemática en esta aplicación de consola de muestra. Esto lo hace realmente 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();
}
}
Espero que esto ayude a alguien.
podría usar un toque de espacios en blanco, pero esto es bastante agradable. – Kirk
Estoy de acuerdo. Gracias por el comentario. :-) –
Todo lo que este método de extensión hará es siempre devolver -1. 'DataKeyArray' no tiene un método' IndexOf() ', la única razón por la que compila es porque su método de extensión se llama IndexOf. Entonces, cuando se llega a la primera línea 'return keys.IndexOf (key)', volverá a llamar al mismo método, solo que esta vez, el parámetro 'value' será una instancia de' DataKey'. Que a su vez no satisfará el predicado 'k.Value.Equals (value)' y devolverá -1. Vea mi comentario a continuación para hacer esto en una línea, sin método de extensión. –