2010-01-28 3 views
0

Мне нужно создавать текстовые поля динамически, так как пользователь указывает на no..actually в строке есть два текстовых поля..user не указывает количество строк, необходимых .. в качестве указанных текстовых полей (по две строки) должен быть добавлен в форму, а также мне нужно прочитать текст, введенный позже .... какой метод лучше?Добавление текстовых полей во время выполнения в asp.net

ответ

2

Если количество текстовых полей является постоянным, а количество строк - динамическим, используйте GridView. Затем привяжите gridview к списку или массиву длины, указанной пользователем. Затем gridview будет отображать указанные строки, и вы можете получить значения из текстовых полей при обратной передаче.

+0

Или ретранслятор ... или список данных. Во всяком случае, используйте для этого шаблонный репитер. – Bryan

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

Примечания:

  • "Контроль", очевидно, будет родительский контроль, где Textboxes идут в вашем случае, например, контроль.
  • Вам нужно будет добавить элементы управления на CreateChildControls или на странице_Инте , чтобы они добавились в нужную точку в течение жизни страницы.
0

Чтобы добавить элементы управления к странице aspx динамически, выполните следующие действия.

Во-первых, добавьте заполнитель на странице ASPX:

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

Шахта называется "AssessCanvas". Затем добавьте элементы управления самостоятельно. Вот код, который я использую в методах, называемых Page_Load, для создания ярлыка и текстового поля. Ярлык будет запрошен «Вес:» и текстовое поле используется для ввода значения веса (в примере, я также в том числе значения для веса, когда я создаю поле):

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); 

Я использую «WSLabelN» (где N - число), чтобы дать уникальный идентификатор каждой метке. Поскольку я хочу отсканировать все свои текстовые поля, чтобы вытащить их содержимое при отправке формы, я даю каждому из них идентификатор формы «XTestN» (где N - уникальный идентификатор для каждого поля - здесь «XTest1 «говорит мне, что это весовое поле).

Когда я готов справиться с отправкой формы, я делаю это:

// 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... 
     } 
    } 
} 

В моей системе, мне часто приходится размещать несколько полей на странице для сбора значений для одного элемента тестирования (система здесь идет страница тестирования работоспособности). Например, «SaveJP3P1» выше не вызывается как показано, потому что он фактически извлекает данные из девять разных полей. Я упростил это для примера по понятным причинам.

Этот подход дает вам отличная сделка гибкости. На моей полной странице у меня есть флажки, метки заголовков (например, ярлык с форматированием HTML/CSS в дополнение к тексту ярлыка) и даже несколько DIVS для тестов на пригодность с несколькими панелями для их ввода. И все из этого сделано динамически. Очевидно, что сетка не будет работать и не будет просто добавлять элемент управления к дереву управления, как предлагали другие.