Pregunta

i necesidad de crear cuadros de texto de forma dinámica como usuario especifica las no..actually hay dos cuadros de texto en un row..user especifica ninguna de las filas necesarias .. como cuadros de texto especificados (dos por fila), debe añadirse a la forma y también Tengo que leer el texto introducido más tarde .... ¿cuál es el mejor método ??

¿Fue útil?

Solución

Si el número de cuadros de texto es constante, sino que el número de filas es dinámica, a continuación, utilizar un GridView. Entonces obligar a la gridview a una lista o matriz de la longitud que el usuario especificado. El gridview a continuación, hacer que las filas especificadas y se puede obtener a partir de los valores de los cuadros de texto en la devolución de datos.

Otros consejos

Control.Controls.Add(new TextBox());

Notas:

  • "control", obviamente, será el control de los padres en los cuadros de texto van en su caso, por ejemplo, un control.
  • Usted tendrá que añadir los controles de CreateChildControls o en Page_Init por lo que se añaden en el momento adecuado en la página de toda la vida.

Para añadir controles a una página aspx de forma dinámica, siga estos pasos.

En primer lugar, añadir un marcador de posición en la página ASPX:

<asp:PlaceHolder runat="server" id="AssessCanvas" />

El mío se llama "AssessCanvas". A continuación, añadir los propios controles. Aquí está el código que uso en los métodos llamados por Page_Load para crear una etiqueta y un cuadro de texto. La etiqueta es un símbolo para "Peso:" y el cuadro de texto se utiliza para introducir un valor de peso (en el ejemplo, También estoy incluyendo un valor para el peso cuando se crea la caja):

Label aLbl = new Label { Text = "Weight: ", ID = ("WSLabel" + counter) };
counter++;
AssessCanvas.Controls.Add(aLbl);

TextBox aBox = new TextBox { ID = "XTest1", Columns = 5, Text = weight.ToString("##0.0"), Width = 50 };
AssessCanvas.Controls.Add(aBox);

utilizo "WSLabelN" (donde N es un número) para dar un identificador único para cada etiqueta. Porque yo voy a querer explorar todos mis cuadros de texto para tirar su contenido cuando se envía el formulario, doy cada uno de ellos una identificación de la forma "XTestN" (donde N es un identificador único para cada campo - aquí el "XTest1 "me dice que este es el campo de peso).

Cuando estoy listo para manejar la forma presente, hago esto:

// Look at each key submitted with the form - *some* of these will be my input text boxes
foreach (string aStr in form.AllKeys)
{
    // Is this an input text box?  Yes if it has "XTest" in it somewhere.
    int position = aStr.IndexOf("XTest");
    if (position > 0)
    {
        // The data entry fields for each input box follows the format: <ASP.NET Prefix>XTest<TID>
        // Here I get the tid so I know what to do with the value that was entered 
        short tid = BSDIUtil.StrToIntDef(aStr.Substring(position + 5));
        switch (tid)
        {
            case 1: SaveWeight(BSDIUtil.StrToFloatDef(form.Get(aStr))); break;
            case 2: SaveJP3P1(BSDIUtil.StrToFloatDef(form.Get(aStr))); break;
            ... etc...
         }
     }
}

En mi sistema, a menudo tengo que colocar varios campos de la página de valores de cobro para un artículo de prueba (el sistema de aquí proviene de una página de prueba de fitness). Por ejemplo, "SaveJP3P1" por encima no se llama como se muestra ya que en realidad toma los datos de nueve diferentes campos. He simplificado que para el ejemplo por razones obvias.

Este enfoque le da un gran cantidad de flexibilidad. En mi página completa, tengo casillas, etiquetas de cabecera (por ejemplo, una etiqueta con HTML / CSS formato en adición al texto de la etiqueta), e incluso varios DIVS para las pruebas de aptitud con múltiples paneles para su entrada. Y todos de la misma se realiza de forma dinámica. Obviamente, una cuadrícula no funcionaría y tampoco acaba de agregar un control al árbol de control como han sugerido otros.

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