Resumiendo: Tengo un GridView con un listado de solicitudes, que cargo a través de un DataSet, el cual puede paginar, ordenar y filtrar (todo funcionando OK). Ahora, el problema surge cuando quiero acceder al detalle de una solicitud en particular a traves de un ButtonField para la columna ID, ya que al momento de filtrar u ordenar el Gridview y querer acceder al detalle haciendo click en el ButtonField, los indices y el ID de la fila se mantienen tal y como se cargaron la primera vez, de modo que accede a otro detalle que no corresponde al que estoy intentando ingresar realmente. Por ejemplo:
Cita:
Supongamos que ese es el GridView la primera vez que lo cargo, hasta ahi todo bien, puedo acceder a los detalles de la solicitud sin ningun problema. Ahora, supongamos que lo filtro por la columna solicitante utilizando a "juan", quedaria algo asi:ID | status | fecha | solicitante
1 | OK | 01-01-2010 | juan
2 | noOK | 01-04-2010 | pedro
3 | OK | 02-03-2010 | diego
4 | OK | 03-03-2010 | juan
1 | OK | 01-01-2010 | juan
2 | noOK | 01-04-2010 | pedro
3 | OK | 02-03-2010 | diego
4 | OK | 03-03-2010 | juan
Cita:
sin embargo, cuando quiero acceder a la solicitud con el ID 4, se carga la solicitud 2, que está "noOK" y fue solicitada por "pedro" y que corresponde al indice de la fila la primera vez que se cargo el GridView. Es como si la ordenacion o el filtro lo hiciera solo "de mentira" para mostrarlo solamente. Yo creo que el problema tiene que ver con el dataBind() tras el filtro o la ordenacion, puesto que genero nuevos datasets o datatables para asociarlos al GridView una vez que he filtrado u ordenado. Por lo demas, el gridview puede ordenar por todas sus columnas , la propiedad DataKeyNames esta asociada al ID y leo el indice de la fila de la siguiente manera:ID | status | fecha | solicitante
1 | OK | 01-01-2010 | juan
4 | OK | 03-03-2010 | juan
1 | OK | 01-01-2010 | juan
4 | OK | 03-03-2010 | juan
Cita:
Si alguien puede ayudarme, seria de gran utilidad y desde ya, muchas gracias Dim index As Integer = Convert.ToInt32(e.CommandArgument)
Dim valor As String = GridView2.DataKeys(index).Value.ToString()
Dim valor As String = GridView2.DataKeys(index).Value.ToString()
Saludos