c# - propiedad - para que una selección persistente funcione se debe especificar datakeynames
Obtener Gridview Row por Datakeynames (3)
Tengo una vista de cuadrícula y tiene datakeynames="Id"
Tengo ese Id en el archivo de código. Ahora quiero obtener la fila de un Id específico.
Por ejemplo Id = 1 entonces quiero obtener la fila de gridview que tiene Id = 1 He usado este código:
foreach (DataKey key in gdvMainList.DataKeys)
{
if (Convert.ToInt32(key.Value) == consentReleaseId)
{
gdvMainListRow = gdvMainList.Rows[index];
break;
}
index++;
}
¿Hay algún mejor enfoque?
Otra opción sería recorrer los elementos de GridView hasta encontrar la clave coincidente.
foreach (GridViewRow row in GridView1.Rows)
{
if (GridView1.DataKeys[row.RowIndex]["ID"] == consentReleaseId)
{
gdvMainListRow = row;
break;
}
}
Otra opción sería vincular el ID de fila a un elemento en la fila de gridview. Muy a menudo esto ocurre en un enlace de acción o botón en la propiedad CommandArgument.
<asp:ButtonField ButtonType="Button" CommandName="Edit" Text="Edit" Visible="True" CommandArgument=''<%# Container.DataItemIndex %>'' />
algo como eso. Luego puede acceder al elemento y obtener la Id. De fila sin ningún bucle.
Una cosa que debe tener cuidado con su nombre es, si tiene paginación en su vista de cuadrícula, y si está en una página diferente, puede terminar tirando de la fila incorrecta o la fila podría no ser encontrada.
En lugar de bucle, puede usar una consulta linq en su fuente de datos como
si su fuente de datos es una lista, obj = lObjs.Where (i => i.Id == permissionReleaseId) .First ();
Si desea cambiar algo en la cuadrícula, puede cambiarlo en el obj y cambiar el origen de datos.