Pregunta

Tengo un ASP.NET GridView que utiliza columnas de plantilla y controles de usuario para poder construir dinámicamente el datagrid. Ahora estoy implementando el controlador de eventos para insertar una fila. Para hacerlo, creo una matriz de valores predeterminados y la agrego a la tabla de datos que actúa como fuente de datos. Sin embargo, cuando mi evento OnLoad se activa en la devolución de datos, todas las columnas de mi plantilla ya no tienen los controles del usuario. Mi vista de cuadrícula termina quedando en blanco sin nada en ella y la columna de mi botón también desaparece (que contiene la fila de agregar, eliminar fila y guardar botones).

Mi evento de agregar fila simplemente hace esto:

    public void AddDataGridRow()
    {
        List<object> defRow = new List<object>();

        for (int i = 0; i < fieldNames.Count; i++)
        {
            defRow.Add(GetDefaultValueFromDBType(types[i]));   
        }

        dt.Rows.Add(defRow);
    }

Se dispara desde un botón en un control de usuario que se implementa de esta manera:

    protected void Button1_Click(object sender, EventArgs e)
    {
        ((Scoresheet)(this.Page)).AddDataGridRow();
    }

El evento Mi carga hace un montón de cosas en la primera ejecución para configurar el GridView, pero no lo ejecuto de nuevo usando la propiedad IsPostBack para informar.

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            Initialize();
    }

¿Alguien tiene alguna pista de por qué desaparecen mis controles de usuario?

¿Fue útil?

Solución

Debe agregar los controles a la cuadrícula en cada page_load, no solo si es (! Postback)

Otros consejos

¿Tiene el EnableViewState = true en los controles de usuario y el GridView?

¿El método AddDataGridRow () es llamado por Initialize ()? Básicamente tienes dos opciones:

  1. Enlazar la cuadrícula en cada devolución de datos y no usar viewstate (pérdida de rendimiento)
  2. Vincula la cuadrícula solo la primera vez (if (! IsPostBack)) y asegúrate de que los controles de usuario mantengan su estado de vista.

A partir de su código, no está claro si los controles del usuario mantienen el estado de visualización y qué contienen. Ni siquiera está claro cuál es el orden de ejecución de los métodos que ha mostrado. No existe una lógica de enlace, por lo que incluso si continúa agregando filas, es posible que la cuadrícula aún no esté vinculada. Por favor, elabore un poco y muestre toda la página con el código.

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