Estoy tratando de obtener un GridView ASP.NET 3.5 para mostrar un valor seleccionado como una cadena cuando se muestra, y para mostrar una DropDownList que me permite elegir un valor de un determinado lista de opciones cuando se edita. Parece lo suficientemente simple?Edición de filas de Gridview: vinculación dinámica a DropDownList
Mi gridview se parece a esto (simplificado):
<asp:GridView ID="grvSecondaryLocations" runat="server"
DataKeyNames="ID" OnInit="grvSecondaryLocations_Init"
OnRowCommand="grvSecondaryLocations_RowCommand"
OnRowCancelingEdit="grvSecondaryLocations_RowCancelingEdit"
OnRowDeleting="grvSecondaryLocations_RowDeleting"
OnRowEditing="grvSecondaryLocations_RowEditing"
OnRowUpdating="grvSecondaryLocations_RowUpdating" >
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblPbxTypeCaption" runat="server"
Text='<%# Eval("PBXTypeCaptionValue") %>' />
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlPBXTypeNS" runat="server"
Width="200px"
DataTextField="CaptionValue"
DataValueField="OID" />
</EditItemTemplate>
</asp:TemplateField>
</asp:GridView>
La cuadrícula se visualiza bien cuando no está en modo de edición - el tipo PBX seleccionado muestra su valor en el asp: control Label. No es sorpresa allí.
Carga la lista de valores de DropDownList en un miembro local llamado _pbxTypes
en el evento OnLoad
del formulario. Verifiqué esto, funciona, los valores están ahí.
Ahora mi reto es: cuando la red pasa al modo de edición para una fila en particular, tengo que obligar a la lista de PBX de la almacenada en _pbxTypes
.
Bastante simple, pensé - sólo tienes que tomar el menú desplegable objeto de lista en caso RowEditing
y adjuntar la lista:
protected void grvSecondaryLocations_RowEditing(object sender, GridViewEditEventArgs e)
{
grvSecondaryLocations.EditIndex = e.NewEditIndex;
GridViewRow editingRow = grvSecondaryLocations.Rows[e.NewEditIndex];
DropDownList ddlPbx = (editingRow.FindControl("ddlPBXTypeNS") as DropDownList);
if (ddlPbx != null)
{
ddlPbx.DataSource = _pbxTypes;
ddlPbx.DataBind();
}
.... (more stuff)
}
El problema es - nunca consigo nada a partir de la llamada FindControl
- parece que el ddlPBXTypeNS
no existe (o no se puede encontrar).
¿Qué me estoy perdiendo? Debe ser algo realmente estúpido ... pero hasta ahora, todo mi Google, leyendo en los controles de GridView, y pidiéndole a mis amigos no ha ayudado.
¿Quién puede detectar el eslabón perdido? ;-)
Difícil ... Obtuve este evento, pero el RowState es "Alterno | Editar" - por lo que su IF nunca es verdadero :-) –
OK, cambié su si para verificar si el bit "Editar" está siendo configurado (ignorando cualquier otro bit que pueda establecerse) ¡y ahora funciona como un amuleto! Gracias un montón !! –
acaba de cambiar el código :) – balexandre