DataGrid desde archivo XML

    El control DataGrid puede conectar con bases de datos, como se ha visto, pero también puede leer los datos desde un archivo XML, de texto plano y fácilmente accesible desde cualquier editor de texto o navegador de Internet, con las ventajas que éso conlleva frente a formatos propietarios de bases de datos.
    Almacenar datos en formato XML tiene algunas ventajas destacadas:

Ordenar el DataGrid

    Es posible configurar maneras diferentes de ordenar los registros del DataGrid , pero la más sencilla de ellas es aprovechar propiedades y métodos del propio control para que los títulos de las columnas se convierten en hipervínculos que, al ser pulsados, ordenen los registros en base al nombre del campo que muestra esa columna.

    Los pasos para conseguir ordenar el DataGrid al pulsar en el título de la columna son poco complejos pero es necesario remarcarlos:

Modificar el DataGrid 

    Para que el usuario pueda modificar los datos del DataGrid mientras está conectado a ellos, tenemos 2 maneras principales de hacerlo:

    En este ejercicio se ha elegido la segunda manera:

<asp:TemplateColumn HeaderText="Nombre">
 <HeaderStyle
Width="300px" HorizontalAlign="Left"></HeaderStyle>
  <ItemTemplate>
  
<%# Container.DataItem("Nombre") %>
  </ItemTemplate>
  <EditItemTemplate>
   <asp:TextBox
id="txtNombre" Width="295px"
        Text=
'<%# Container.DataItem("Nombre")%>' runat="server" />
  </EditItemTemplate>
</asp:TemplateColumn>

    Las columnas del DataGrid que contienen los enlaces a los métodos de edición de registros son diferentes, en este ejercicio se han empleado asp:LinkButton en las que se definen los comandos Edit, Delete, Cancel y Update:
 

<asp:TemplateColumn>
 <ItemTemplate>
  <asp:LinkButton
CommandName="Edit" Text="Editar" runat="server" ID="btEdit" />
  <asp:LinkButton
CommandName="Delete" Text="Borrar" runat="server" ID="btDelete" />
 </ItemTemplate>
 <EditItemTemplate>
  <asp:LinkButton
CommandName="Cancel" Text="Cancelar" runat="server" ID="btCancel" />
  <asp:LinkButton
CommandName="Update" Text="Actualizar" runat=server" ID="btUpdate" />
 </EditItemTemplate>
</asp:TemplateColumn>

    El nombre de los métodos que se ejecutarán en cada uno de estos comandos se define en la etiqueta asp:DataGrid

<asp:DataGrid OnDeleteCommand="cmDelete" OnCancelCommand="cmCancel" OnUpdateCommand="cmUpdate" OnEditCommand="cmEdit">

    Después hay que definir en el código Visual Basic cada uno de estos métodos, como ejemplo, vemos el que activa el modo de edición cmEdit:

'Procedimiento al pulsar el botón EDITAR del control DataGrid
'Este controlador para el evento cmEdit (evento del tipo EditCommand)
'establece la propiedad EditItemIndex en la fila seleccionada

Sub cmEdit(ByVal Sender As Object, ByVal e As DataGridCommandEventArgs)
'Editar el elemento cuyo índice coincide con el de la fila elegida
rejilla.EditItemIndex = CInt(e.Item.ItemIndex)
'Enlazar de nuevo los datos al control DataGrid
rejilla.DataSource = dsDatos()
rejilla.DataBind()
End Sub

    O el que activa el modo de edición cmDelete :

'Procedimiento al pulsar el botón BORRAR
Sub cmDelete(Sender As Object, e As DataGridCommandEventArgs)
'Generar una instancia de DataSet
Dim dsDatos2 As DataSet = dsDatos()
'Entero que contiene el índice de la fila seleccionada
Dim fila As Integer = CInt(e.Item.ItemIndex)
'Eliminar la fila seleccionada
dsDatos2.Tables(0).Rows(fila).Delete()
'Escribir el contenido del DataSet en el archivo XML
dsDatos2.WriteXml(Server.MapPath("../datos/agenda2.xml"))
'Quitar el modo de edición a la fila seleccionada:
'EditItemIndex igual a -1 desactiva el modo de edición
rejilla.EditItemIndex = -1
'Enlazar de nuevo los datos al control DataGrid
rejilla.DataSource = dsDatos()
rejilla.DataBind()
End Sub

Problemas de seguridad al generar la página aspx

Si al generar la página dinámica aspx aparece un error de compilación relacionado con un mensaje del tipo: "Exception Details: System.UnauthorizedAccessException: El acceso a la ruta "ruta_al_archivo_xml" ha sido denegado. Asp .NET no está autorizado a acceder al recurso solicitado..." posiblemente la carpeta en que se encuentra el archivo XML no tenga concedidos por IIS permisos de escritura (se soluciona fácilmente configurando los permisos de IIS con la herramienta %SystemRoot%\System32\Inetsrv\iis.msc y añadiendo permisos de escritura a ese directorio haciendo clic con el botón derecho sobre él y entrando en la pestaña Directorio).

Si con ello el error no desaparece, entonces lo más probable sea que la carpeta que contiene el archivo XML no tenga, entre los grupos de usuarios que tienen permiso para acceder a ella, el grupo Nombre_de_máquina/ASP .NET (ASP.NET Machine Account) o, en caso de tenerlo, este grupo ASP .NET no tenga concedidos los permisos adecuados de modificación y escritura, en cualquiera de los 2 casos hay que entrar en la configuración de seguridad de la carpeta (clic con el botón derecho sobre la carpeta, elegir Propiedades y seleccionar la pestaña Seguridad para añadir o modificar el grupo apropiado, remarcar la cuenta ASP .NET y marcar las casillas de verificación deseadas).

Para los usuarios de Windows XP Home, conviene recordar que la pestaña Seguridad de las carpetas y archivos sólo está disponible si se entra en el sistema en modo seguro, para ello hay que pulsar F8 justo antes de que se inicie el arranque de Windows y elegir Modo seguro en el menú que se muesta en pantalla.
 

NOTA: Para que el código de la aplicación sea más legible, se ha separado en 2 archivos, la página aspx contiene el código HTML - Asp.NET y un archivo externo vb contiene el código Visual Basic (código de apoyo).