Share via


Tutorial: Rellenar un control de cuadrícula con datos de una consulta LINQ

Última modificación: jueves, 03 de marzo de 2011

Hace referencia a: SharePoint Foundation 2010

En este tutorial, se ilustra cómo usar una simple consulta LINQ to SharePoint para obtener campos seleccionados de datos de dos listas diferentes. Los datos se presentan en un elemento web con un control de cuadrícula. Para obtener una descripción general de las consultas con LINQ to SharePoint, vea Procedimiento para consultar mediante LINQ to SharePoint.

Requisitos previos

  • Asegúrese de que la ruta de acceso a la herramienta SPMetal sea parte de la variable de entorno %PATH%. Para obtener más información, vea Procedimiento para agregar ubicaciones de herramienta a la variable de entorno PATH.

  • Cree un sitio web de Microsoft SharePoint Foundation denominado Contoso. El resto de este tutorial, incluido el código y las marcas, da por sentado que se está usando este nombre.

  • Cree dos listas en el sitio web denominadas Empleados y Proyectos. De manera automática, se presenta una columna predeterminada denominada Título en cada lista. Agregue columnas a las listas, como se muestra en las tablas siguientes.

    Lista de empleados:

    Nombre de columna

    Tipo de columna

    Comentarios

    Título del puesto

    Una línea de texto

    Equipo

    Una línea de texto

    Proyecto

    Búsqueda

    Búsqueda de la columna Título de la lista Proyectos.

    Lista de proyectos:

    Nombre de columna

    Tipo de columna

    Comentarios

    Descripción

    Una línea de texto

    Fecha de vencimiento

    Fecha y hora

    Contacto principal

    Búsqueda

    Búsqueda de la columna Título de la lista Empleados.

  • Complete ambas listas con algunos elementos de lista de ejemplo. Use el campo Título de la lista Empleados para mantener un nombre de empleado. Use el campo Título de la lista Proyectos para mantener el nombre del proyecto. Algunas de las fechas de vencimiento del proyecto deberían distar menos de seis meses de la fecha actual, y otras fechas de vencimiento deberían distar más de seis meses de la fecha actual.

Para configurar el proyecto

  1. En Microsoft Visual Studio, inicie un proyecto de elemento web seleccionando Elemento web visual en la sección SharePoint | 2010 del área Plantillas instaladas, en el cuadro de diálogo Nuevo proyecto. Denomine el proyecto ProjectsWithContacts y haga clic en Aceptar. Se abrirá el Asistente para la personalización de SharePoint.

  2. Especifique el sitio Contoso como el sitio de depuración e indique que desea implementar una solución de granja de servidores en lugar de una solución de espacio aislado. Haga clic en Finalizar.

  3. En el Explorador de soluciones, haga clic con el botón secundario en el nodo Referencias y, a continuación, haga clic en Agregar referencia. En la ficha .NET del cuadro de diálogo Agregar referencia, seleccione Microsoft.SharePoint.Linq. Puede ser útil ordenar alfabéticamente la lista de componentes haciendo clic en la barra Nombre de componente. Haga clic en Aceptar.

  4. Haga clic con el botón secundario en el nombre del proyecto en el Explorador de soluciones y seleccione Propiedades.

  5. En la ficha Aplicación del cuadro de diálogo Propiedades, escriba Contoso.SharePoint.WebPartPages.ProjectsByContact como Nombre del ensamblado y Contoso.SharePoint.WebPartPages como Nombre de espacio predeterminado. Deje definida la Versión de .NET Framework de destino en .NET Framework 3.5.

    Nota importanteImportante

    Para proyectos basados en cualquier plantilla de la sección SharePoint | 2010 de las Plantillas instaladas, la Versión de .NET Framework de destino predeterminada es .NET Framework 3.5. No la cambie. El valor predeterminado del cuadro Plataformas de solución del Menú estándar de Visual Studio es "Any CPU". Puede cambiar este valor a "x64" mediante la lista desplegable Destino de la plataforma, en la ficha Generación del diálogo Propiedades. Para obtener más información sobre cómo realizar la selección, vea Procedimiento para establecer el marco de destino y CPU correctos.

  6. Haga clic en el botón Guardar todos los archivos de la barra de herramientas.

  7. Para automatizar el uso de la herramienta SPMetal, agregue al proyecto un archivo de texto denominado Prebuild.bat.

  8. Abra Prebuild.bat si aún no está abierto. Agregue las siguientes líneas.

    Echo Off
    SET SPLANGEXT=cs
    
    Echo Backing up previous version of generated code ... 
    IF NOT EXIST .\PreviousVersionGeneratedCode MkDir .\PreviousVersionGeneratedCode
    IF EXIST Contoso.%SPLANGEXT% xcopy /Y/V Contoso.%SPLANGEXT% .\PreviousVersionGeneratedCode
    
    Echo Generating code ...
    SPMetal /web:http://MyServer/Contoso /code:Contoso.%SPLANGEXT%
    

    Realice los siguientes cambios en el código, según sea necesario:

    • Reemplace "MyServer/Contoso" con la ruta de acceso completa al sitio web Contoso.

    Este archivo por lotes guarda la versión anterior del código generado para que pueda compararla con la nueva versión cuando sea necesario con fines de depuración.

  9. Guarde el archivo, pero no lo guarde haciendo clic en el botón Guardar o Guardar todos los archivos en la barra de herramientas o seleccionando Guardar en el menú Archivo. La codificación predeterminada de los archivos de texto en Visual Studio no es compatible con los archivos por lotes de sistema. En su lugar, en el menú Archivo, seleccione Guardar Prebuild.bat como. En el cuadro de diálogo Guardar archivo como, haga clic en la flecha abajo del botón Guardar. Seleccione Guardar con codificación. En el cuadro de diálogo Opciones avanzadas para guardar, en la lista desplegable Codificación, seleccione Unicode (UTF-8 sin firma) - Página de códigos 65001 y, a continuación, haga clic en Aceptar. Asegúrese de seleccionar la versión "sin firma" de UTF-8.

    SugerenciaSugerencia

    Si el archivo se guarda accidentalmente de forma incorrecta, ábralo de nuevo y realice un pequeño cambio, como agregar un carácter de espacio, y vuelva a guardarlo de la forma correcta. No se volverá a guardar realmente si no realiza un cambio.

  10. Haga clic con el botón secundario en el nombre del proyecto en el Explorador de soluciones. Seleccione Propiedades y abra la ficha Eventos de compilación.

  11. En el cuadro Línea de comandos del evento anterior a la compilación (no en el del evento posterior), escriba las siguientes dos líneas.

    cd $(ProjectDir)
    Prebuild.bat
    

    Haga clic en el botón Guardar todo.

  12. En el menú Generar, seleccione Generar solución. Esto invocará el archivo por lotes y, en consecuencia, SPMetal. SPMetal crea un archivo denominado Contoso.cs en el directorio de proyecto en Windows, pero no en el Explorador de soluciones. Agréguelo al proyecto como un Elemento existente.

    El archivo Contoso.cs se regenera cada vez que vuelve a generar el proyecto. Si bien la regeneración del archivo no es necesaria para este tutorial, se recomienda llevarla a cabo al usar SPMetal, ya que garantiza que el archivo Contoso.cs refleje los cambios hechos en las listas, la adición de nuevas listas que se agregan al sitio web y la eliminación de listas del sitio web.

Para crear el código y las marcas

  1. En el Explorador de soluciones, expanda el nodo VisualWebPart1 y abra el archivo VisualWebPart1.webpart.

  2. Establezca el valor de la propiedad Title en "Proyectos enumerados por contacto principal".

  3. Establezca el valor de la propiedad Description en "Proyectos con vencimiento en los próximos 6 meses, enumerados por contacto principal".

  4. Haga clic en el botón Guardar de la barra de herramientas.

  5. Abra el archivo VisualWebPart1UserControl.ascx y agregue las siguientes marcas debajo de las directivas.

    <%@ Import Namespace="Microsoft.SharePoint.WebControls" %>
    
    <SharePoint:SPGridView id="spGridView" runat="server" AutoGenerateColumns="false">
      <HeaderStyle HorizontalAlign="Left" ForeColor="Navy" Font-Bold="true" />
      <Columns>
        <SharePoint:SPBoundField DataField="Title" HeaderText="Employee">
          <headerstyle HorizontalAlign="Left" />
        </SharePoint:SPBoundField>
        <SharePoint:SPBoundField DataField="JobTitle" HeaderText="Job Title">
          <headerstyle HorizontalAlign="Left" />
        </SharePoint:SPBoundField>
        <SharePoint:SPBoundField DataField="ProjectTitle" HeaderText="Project Title">
          <headerstyle HorizontalAlign="Left" />
        </SharePoint:SPBoundField>
        <SharePoint:SPBoundField DataField="DueDate" HeaderText="Due Date">
          <headerstyle HorizontalAlign="Left" />
        </SharePoint:SPBoundField>
      </Columns>
    </SharePoint:SPGridView>
    
  6. Haga clic en el botón Guardar de la barra de herramientas.

  7. En el Explorador de soluciones, expanda el nodo VisualWebPart1UserControl y abra el archivo subyacente al código VisualWebPart1UserControl.ascx.cs.

  8. Agregue las siguientes instrucciones using.

    using System.Linq;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Linq;
    
  9. Reemplace el método Page_Load con lo siguiente. Tenga en cuenta que las expresiones emp.Project.DueDate y emp.Project.Title crean uniones implícitas entre las listas Empleados y Proyectos. Tenga también en cuenta que la cláusula select especifica únicamente los campos que se presentarán en el elemento web. El campo Descripción de cada elemento de proyecto no necesita enviarse a través de la red desde la base de datos de contenido hasta el servidor front-end web.

    protected void Page_Load(object sender, EventArgs e)
    {
        using (ContosoDataContext dc = new ContosoDataContext(SPContext.Current.Web.Url))
        {
            EntityList<EmployeesItem> Employees =
            dc.GetList<EmployeesItem>("Employees");
    
            var empQuery = from emp in Employees
                           where emp.Project.DueDate < DateTime.Now.AddMonths(6)
                           select new
                           {
                               emp.Title,
                               emp.JobTitle,
                               ProjectTitle = emp.Project.Title,
                               DueDate = emp.Project.DueDate.Value.ToShortDateString()
                            };
    
            spGridView.DataSource = empQuery;
            spGridView.DataBind();
        }
    }
    
  10. Haga clic en el botón Guardar de la barra de herramientas.

Para implementar y probar el elemento web

  1. En el menú Generar, seleccione Implementar solución. El proceso de implementación realiza lo siguiente:

    • Ejecuta el archivo por lotes (y, en consecuencia, SPMetal)

    • Genera el proyecto

    • Implementa el archivo de paquete ProjectsWithContacts.wsp en la galería de soluciones de la granja de servidores

    • Implementa el ensamblado Contoso.SharePoint.WebPartPages.ProjectsByContact.dll en la memoria caché global de ensamblados (GAC)

    • Agrega la característica ProjectsWithContacts Feature1 a la galería de características de la colección de sitios

    • Activa la característica

    • Recicla Internet Information Services (IIS)

    Al seleccionar Implementar solución después de realizar cambios en el proyecto, se anula automáticamente la versión anterior de la solución y se reemplaza por la versión más reciente.

  2. Navegue a cualquier página de elementos web del sitio web y haga clic en la pestaña Página de la cinta.

  3. Haga clic en Editar página y, a continuación, haga clic en Agregar elemento web en cualquier zona de elementos web.

  4. En el cuadro Categorías, haga clic en la carpeta Personalizadas, haga clic en Proyectos enumerados por contacto principal en el cuadro Elementos web y, a continuación, haga clic en Agregar.

  5. Haga clic en Detener la edición. Compruebe que el elemento web aparezca en la página y se complete con datos de las dos listas. Los proyectos con fechas de vencimiento que distan más de seis meses de la fecha actual no deberían mostrarse.

Vea también

Tareas

Procedimiento para usar SPMetal

Conceptos

Procedimiento para consultar mediante LINQ to SharePoint

Procedimiento para agregar ubicaciones de herramienta a la variable de entorno PATH

Otros recursos

Administración de datos con LINQ to SharePoint