Cómo acceder al valor de un control creado dinámicamente en una vista de cuadrícula en ASP.NET

No puedo entender cómo acceder al valor de un control en una vista de cuadrícula creada dinámicamente. El problema es que no sé el nombre del control. Si supiera el nombre del control, podría hacer esto:

string dropDownListText =((DropDownList).row.FindControl("DropDownList1")).SelectedItem.Value;`

Conozco el tipo de control y la celda en la que se encuentra. ¿Hay alguna forma de usar la información sobre el control que tengo para poder acceder al valor del control?

preguntado el 03 de mayo de 12 a las 16:05

¿Podría asignar un valor a la propiedad ID cuando el control se crea dinámicamente? -

¿Puedes compartir el evento y codificar el control generado dinámicamente? Será fácil de comprobar. ¿Revisaste el View Source Code después de la PostBack para este control creado dinámicamente. Según tengo entendido, debería perderse durante PostBack. Todos Dynamically/Compile time generado Controls se mostrarán Disposed por Fin de la Page Life Cycle. -

3 Respuestas

Si sabe qué celda es, entonces podría hacer algo como esto;

TableCell tc = GridView1.Cells[indexOfCell]; 
// where GridView1 is the id of your GridView and indexOfCell is your index
foreach ( Control c in tc.Controls ){
    if ( c is YourControlTypeThatYouKnow ){
        YourControlTypeThatYouKnow myControl = (YourControlTypeThatYouKnow)c;
    }
}

Si no sabe qué celda es exactamente, siempre puede recorrer cada celda. Estoy seguro de que hay una mejor manera en Linq.

Con Linq (creo que esto debería funcionar)

var controls = GridView1.Cells[indexOfCell].Cast<Control>();
YourControlTypeThatYouKnow myControl = (YourControlTypeThatYouKnow) controls.Where( x => x is YourControlTypeThatYouKnow).FirstOrDefault();

contestado el 03 de mayo de 12 a las 17:05

En el controlador de eventos ItemDataBound de GridView, acceda a la celda de la tabla de la siguiente manera. Dentro de la celda, la colección Controls le brinda acceso al control ASP incrustado en la celda

TableCell cell = e.Item.Cells[0];
if (cell.Controls.Count > 0)
{
   cell.Controls[0].Visible = false;
}

contestado el 03 de mayo de 12 a las 16:05

Yo he tenido el mismo problema. Agregue un nombre de comando a su campo como CommandName="ProjectClick". Luego agregue un comando de fila y en el comando de fila haga esto:

if (e.CommandName.Equals("ProjectClick")) {
}

o puedes usar el texto:

if (e.CommandName.Equals("")) {
    if (((System.Web.UI.WebControls.LinkButton)(e.CommandSource)).Text.Equals("Projects")) {
    }
}

contestado el 04 de mayo de 12 a las 04:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.