Inicio > C#, SharePoint, Tips y trucos > Enlaza rápidamente una lista SharePoint a un control

Enlaza rápidamente una lista SharePoint a un control


Cuando creamos WebParts para SharePoint una de las cosas que solemos hacer leer datos de una lista e insertarlos en algún control, como un DropDownList. Para ello, solemos hacer algo así:

// dentro de un WebPart, obvio...
protected override void CreateChildControls()
{
    base.CreateChildControls();

    DropDownList _organizationList = new DropDownList();
    _organizationList.Width = new Unit(100, UnitType.Percentage);

    SPWeb web = SPContext.Current.Web;
    // asumiendo que existe una lista llamada Organizaciones:
    SPList list = web.Lists["Organizaciones"]; 
    foreach (SPListItem item in list.Items)
    {
        ListItem data = new ListItem(item.Title, item.ID.ToString());
        _organizationList.Add(data);
    }

    Controls.Add(_organizationList);
}

Esto puede ser laborioso si tenemos varios controles que enlazar. Afortunadamente podemos hacer uso del soporte para enlazado de datos que viene con cada control de ASP.NET. Es demasiado sencillo. El código anterior se puede reescribir así:

 

// dentro de un WebPart, obvio...
protected override void CreateChildControls()
{
    base.CreateChildControls();

    SPList list = SPContext.Current.Web.Lists["Organizaciones"];
    _organizationList = new DropDownList();
    _organizationList.ID = "_organizationList";
    _organizationList.Width = new Unit(100, UnitType.Percentage);
    _organizationList.DataSource = list.Items;
    _organizationList.DataTextField = "Title";
    _organizationList.DataValueField = "ID";
    _organizationList.DataBind();
    Controls.Add(_organizationList);
}

Mucho más sencillo, ¿verdad? Lo único que hacemos es establecer el DataSource a la colección SPListItemCollection que regresa SPList.Items y ¡voilà! Somos felices.

Por supuesto, si tienes que filtrar datos siempre puedes usar list.GetItems (pasándole el SPQuery correspondiente) en el DataSource y el efecto es el mismo. Y mejor aún, si usas un GridView, puedes aplicar exactamente la misma técnica. Soberbio, ¿no?

Anuncios
Categorías:C#, SharePoint, Tips y trucos Etiquetas: ,
  1. abril 5, 2012 en 9:56 am

    Hola!! estoy tratando de colocar unos Pins en un mapa de Bing, pero actualmente lo estoy realizando de manera manual:

    var miMapa = null;
    function GetMapa()
    {
    miMapa = new VEMap(‘miMapa’);
    miMapa.LoadMap(new VELatLong(-2, -78.5063), 6, ‘r’ , false);
    AddPin(-0.3760, -78.8387,’Lugar 1′);
    AddPin(-2.0425, -79.1483,’Lugar 2′);
    // Así hasta el infinito….
    }

    function AddPin(Latitud, Longitud, Titulo)
    {
    var miForma = new VEShape(VEShapeType.Pushpin, new VELatLong(Latitud, Longitud));
    miForma.SetTitle(Titulo);
    }
    //…..continua el código, lo adjuntaría si es necesario.

    Pero quisiera saber si existe manera que en vez de colocarlo de manera manual lo alimente a través de una Lista de Sharepoint, la verdad soy un poco novato en este he intentado realizarlo a través del código que indicas arriba pero no me ha funcionado.

    por cierto el código lo estoy implementando en una web Part de “Editor de contenido”.

    Apreciaría mucho me ayudes con una sugerencia.

    Saludos,
    Roberto

  2. abril 5, 2012 en 10:01 am

    Ah, perdón al comentario anterior se me olvido añadir la cabezera:

    var miMapa = null;
    function GetMapa()
    {
    miMapa = new VEMap(‘miMapa’);
    miMapa.LoadMap(new VELatLong(-2, -78.5063), 6, ‘r’ , false);
    //Etc, etc

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s