2011-11-05 8 views
5

Io apprezzo risposte in VB o C#Come generare dinamicamente la casella di testo e raccogliere i dati inseriti dall'utente?

si usa un database per creare moduli di raccolta dati con gli elementi dinamici

enter image description here

Ho usato questo codice per generare etichette e caselle di testo da una tabella nel database (quando l'utente preme il pulsante "Carica 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 

quando il modulo di raccolta dati viene caricato, la pagina si presenta come questo

enter image description here

e la "fonte pagina di visualizzazione" mostra

<!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> 

una volta che l'utente compila il modulo e fai clic su Inserisci, voglio salvare il testo inserito in un altro tabel nel database usando questo codice. non funziona. puoi dirmi dov'è il mio errore?

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 

il messaggio di errore simile a questo quando clicco "Inserisci"

enter image description here

+0

Quando si dice "non funziona", cosa ti aspetti che faccia in modo specifico e in un certo dettaglio e cosa invece fa esattamente? Se ci sono eccezioni o messaggi di errore visualizzati, quali sono? –

+0

ho modificato la mia domanda @ MerlynMorgan-Graham –

+0

Molto meglio i dettagli. Non riesco a leggere lo screenshot dell'origine della pagina. Se non importa, ti suggerirei di rimuoverlo. Se è importante, ti suggerisco di incollare il codice nella domanda piuttosto che uno screenshot. Anche il messaggio di eccezione sarebbe migliore nel testo. –

risposta

0

E 'il vostro ... = Session("FUt").Text e ... = Session("FUDt").Text.

Queste sono stringhe e il .Text sta tentando di chiamare una proprietà che non esiste.

+0

ho bisogno di una soluzione per ottenere i dati inseriti nel database. puoi sistemare il mio codice per fare questo? –

+0

se hai bisogno di ulteriori dettagli, per favore dimmi –

0

Dove è definita la Sessione? Hai controllato il livello di accesso della proprietà Text (deve essere pubblico altrimenti verrà generata l'eccezione che stai ricevendo)?

+0

ho bisogno di una soluzione per ottenere i dati inseriti nel database. puoi sistemare il mio codice per fare questo? se hai bisogno di maggiori dettagli, per favore dimmi –

2

È necessario recuperare i controlli effettivi creati in button1_click invece dei rispettivi ID memorizzati nello stato di sessione.

Tuttavia, poiché questi controlli vengono creati dinamicamente in fase di runtime, il codice diventerà notevolmente più complesso poiché sarà necessario aggiungere tutti i controlli alla pagina ogni volta che si chiama Page Init. Vedere i seguenti articoli per ulteriori informazioni:

ASP.NET Page Life Cycle Overview

View State and Dynamically Added Controls

Dynamic Web Controls, Postbacks, and View State

Sulla base della complessità che questo introduce, vorrei suggerire un approccio più diretto in cui si dispone di un numero di etichette e caselle di testo già sulla pagina, ma nascoste dagli attributi CSS (display: none; visibility: hidden).

Un approccio ancora migliore consiste nell'utilizzare un controllo di rete, che è l'ideale per questo tipo di comportamento. Ci sono un sacco di esempi qui:

Table of Contents: GridView Examples for ASP.NET 2.0

+0

+1 per il controllo della griglia. Pensavo di ricordare che questo era più semplice ... –

Problemi correlati