Как динамически генерировать текстовое поле и собирать данные, введенные пользователем? - PullRequest
5 голосов
/ 06 ноября 2011

Я буду признателен за ответы в VB или C #

мы используем базу данных для создания форм сбора данных с динамическими элементами

enter image description here

Я использовал этот код для генерацииметки и текстовые поля из таблицы в базе данных (когда пользователь нажимает кнопку «загрузить CRF»)

enter image description here

 Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim CRFgrid As New GridView
    CRFgrid.DataSource = CRFds
    CRFgrid.DataBind()

    Dim ItemCount As Integer = CRFgrid.Rows.Count
            Session("Itemcount") = CRFgrid.Rows.Count

    For I = 0 To (ItemCount - 1)
        Dim itemname As String = CRFgrid.Rows(0 + I).Cells(1).Text.ToString
        Session("Item") = "Item" + (I + 1).ToString
        Dim ItemNamelabel As New Label
        Dim ItemNameBox As New TextBox

        ItemNamelabel.ID = "L" + (I + 1).ToString
        Session("FU" + I.ToString) = ItemNamelabel.ID.ToString
        ItemNameBox.ID = "T" + (I + 1).ToString

        ItemNamelabel.Text = "<br />" + (Session("Item").ToString) + " " + itemname + " " + "<br />"

        Me.Form.Controls.Add(ItemNamelabel)
        Me.Form.Controls.Add(ItemNameBox)



    Next
End Sub

при загрузке формы сбора данных страница выглядит следующим образомэто

enter image description here

и «источник просмотра страницы» показывает

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

 </title></head>
<body>
<form method="post" action="Default.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"     value="/wEPDwUKLTI0NTA5MDI3NGRkUb8sl0uZpLbvUN/GSmHgjYxS9xqGR7rmcMBR3Ufhz4w=" />
</div>

<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWCQLf7PXOCQKM54rGBgK7q7GGCALF9vKRBQLs7+btDALs7+LtDALs797tDALs79rtDALs79btDDHrb+Vhkcph8brtCJP9//5IH57FFoImey2PApARP+k1" />

<input type="submit" name="Button1" value="LoadCRF" id="Button1" style="width:85px;" />
<br />
<br />
<input type="submit" name="Button2" value="InsertData" id="Button2" style="width:85px;" />
<br />
<br />

MRN
<input name="MRNtxt" type="text" id="MRNtxt" />
<br />
<br />
<span id="L1"><br />Item1 Diagnosis <br /></span><input name="T1" type="text" id="T1" /><span id="L2"><br />Item2 Treatment Protocol <br /></span><input name="T2" type="text" id="T2" /><span id="L3"><br />Item3 Initial CSF <br /></span><input name="T3" type="text" id="T3" /><span id="L4"><br />Item4 Location <br /></span><input name="T4" type="text" id="T4" /><span id="L5"><br />Item5 Consultant <br /></span><input name="T5" type="text" id="T5" /></form>

один разПользователь заполняет форму и нажимает вставить, я хочу сохранить введенный текст в другую таблицу в базе данных, используя этот код.это не работает.Можете ли вы сказать мне, где моя ошибка?

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click


    Dim mydb As New OleDbConnection
    mydb =
    New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= |datadirectory|openclinica.mdb;Persist Security Info=True")
    mydb.Open()
    Dim Y As Integer = Session("Itemcount")
    For M = 1 To Y

        Session("FUt") = "L" + M.ToString
        Session("FUDt") = "T" + M.ToString

        Dim sqlstring = "INSERT INTO [Followup] ([MRN], [FU], [FUData]) VALUES (@MRNtxt, @" + Session("FUt") + ", @" + Session("FUDt") + ");"
        Dim mydbcommand As New OleDbCommand(sqlstring, mydb)
        mydbcommand.Parameters.Add("@MRNtxt", OleDbType.VarChar).Value = MRNtxt.Text
        mydbcommand.Parameters.Add("@" + Session("FUt"), OleDbType.VarChar).Value = Session("FUt").Text
        mydbcommand.Parameters.Add("@" + Session("FUDt"), OleDbType.VarChar).Value = Session("FUDt").Text
        mydbcommand.ExecuteNonQuery()

    Next

    mydb.Close()
End Sub

сообщение об ошибке выглядит так, когда я нажимаю "вставить"

enter image description here

Ответы [ 4 ]

2 голосов
/ 06 ноября 2011
2 голосов
/ 06 ноября 2011

Вам нужно получить фактические элементы управления, созданные в button1_click, вместо их идентификаторов, которые вы храните в состоянии сеанса.

Однако, поскольку эти элементы управления динамически создаются во время выполнения, ваш код станет существенно более сложным, поскольку вам придется добавлять все элементы управления на страницу при каждом вызове Page Init. Для получения дополнительной информации см. Следующие статьи:

Обзор жизненного цикла страницы ASP.NET

Просмотр состояния и динамически добавленные элементы управления

Динамические веб-элементы управления, обратные передачи и состояние просмотра

Исходя из сложности, с которой это связано, я бы предложил более простой подход, при котором у вас уже есть несколько меток и текстовых полей на странице, но они скрыты атрибутами CSS (display: none; visibility: hidden).

Еще лучшим подходом является использование элемента управления сеткой, который идеально подходит для такого поведения. Здесь есть множество примеров:

Содержание: Примеры GridView для ASP.NET 2.0

0 голосов
/ 06 ноября 2011

Где определяется сессия?Вы проверили уровень доступа к свойству Text (оно должно быть общедоступным, иначе вы получите исключение)?

0 голосов
/ 06 ноября 2011

Это ваши ... = Session("FUt").Text и ... = Session("FUDt").Text.

Это строки, и .Text пытается вызвать свойство, которое не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...