Pregunta

Lo que estoy buscando es una manera de imitar la forma continua estilo MS-Access dentro de asp.net. En un caso particular, quiero un control, unido a una fuente de datos que devuelve una lista desplegable para cada fila, unido al valor dentro de la fuente de datos. Cualquier cambio en cualquiera de los dropdownlists' llevaría a cabo una actualización de la base de datos al instante.

Tengo a medio camino de lograr esto usando un control de repetidor, con la DropDownList.SelectedValue asignado dentro del evento Repeater.ItemDataBound.

Pero ahora, suponiendo añado un evento OnSelectedIndexChanged a la DropDownList - ¿cómo iba a continuación, consulta el repetidor saber qué fila que estaba en (para obtener el valor de la clave primaria, por ejemplo)

No estoy seguro de que esto se puede hacer fácilmente .. Entonces la pregunta es ¿qué debería estar haciendo en realidad? No quiero utilizar un GridView que me obliga a seleccionar una fila de editar .. Yo sólo quiero tener las dropdownlists AutoPostBack para las actualizaciones.

La esperanza que está claro?!

Saludos! : D

¿Fue útil?

Solución

En aras ejemplos, digamos que estamos unirse a una clase personalizada denominada Record

public class Record
{
    public int Id;
    public string Value;
}

Si pones lógica personalizada en el caso Repeater.OnItemCreated puede adjuntar la clave principal para la identificación de la lista desplegable

protected void Repeater_ItemCreated(object sender, RepeaterItemEventArgs e)
{
    if (!(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem))
        return;

    var dataItem = e.Item.DataItem as Record;
    if (dataItem == null) return;

    var dropdown = e.Item.FindControl("myDropDown") as DropDownList;
    if (dropdown == null) return;

    dropdown.ID = dropdown.ID + dataItem.Id;
}

A continuación, en la SelectedIndexChange, se puede tirar de la identificación fuera de la lista desplegable que generó el evento.

protected void SelectedIndexChanged(object sender, EventArgs e)
{
    var dropdown = sender as DropDownList;
    if (dropdown == null) return;

    var stringId = dropdown.ID.Replace("myDropDown", "");
    int id;
    if (Int32.TryParse(stringId, out id))
    {
        updateRecord(id, dropdown.SelectedValue);
    }
}

Es mucho más que un truco feo, pero debe permitirle hacer lo que quiere.

Otros consejos

La manera más fácil para hacer frente a esto sería para imitar el estilo de forma continua ASP.NET acceso. Lo que sería para hacer un control de usuario para manejar la interfaz de usuario a nivel de fila, a continuación, poner dicho control de usuario en un repetidor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top