Cambiar el valor de cada celda de una columna DataTable
-
03-10-2019 - |
Pregunta
Tengo un System.Data.DataTable la que estoy unión a un GridView. Si el usuario no tiene una cierta función de seguridad, que desea reemplazar los datos en ciertas columnas con una "X". ¿Puedo hacer esto sin bucle a través de todas las filas?
Solución
También podría hacerlo en la parte final. Pasar el ID de usuario o rol a un SP que devuelve sólo las columnas visibles y valores 'X' para las columnas que no pueden ver, y la interfaz de usuario se unen a eso.
Otros consejos
Implementar evento RowDataBound del GridView y hacer el cambio de allí si el papel de seguridad del usuario es insuficiente.
void CusomGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if(User.Role != "Admin")
{
e.Row.Cells[1].Text = "X";
}
}
En sentido estricto, no. Puede utilizar los métodos de extensión de estilo de LINQ para ocultar la aplicación, pero cualquier código en un lenguaje de procedimientos va a implicar un bucle iterativo a través de las filas. Incluso el evento RowDataBound se dispara de forma iterativa por cada fila; sin embargo, es la iteración a través de las filas de todos modos, así que al menos usted no está duplicando el comportamiento de bucle.
Simplemente podría tener una segunda columna disponible y listo el nombre de "su columna2" lleno de datos x, a continuación, determinar qué columna es visible según el nivel de acceso de administrador.
En VB.NET no se puede cambiar los valores de cada fila sin recursividad.