c# - valor - etiqueta en access
¿Cómo generar dinámicamente el cuadro de texto y recopilar los datos ingresados por el usuario? (4)
¿Dónde se define la sesión? ¿Ha comprobado el nivel de acceso de la propiedad Text (debe ser pública, de lo contrario, se lanzará la excepción)?
Apreciaré las respuestas en VB o C #
utilizamos una base de datos para crear formularios de recopilación de datos con elementos dinámicos
Usé este código para generar etiquetas y cuadros de texto de una tabla en la base de datos (cuando el usuario pulsa el botón "cargar CRF")
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
cuando se carga el formulario de recolección de datos, la página se ve así
y la "fuente de la página de visualización" muestra
<!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 vez que el usuario llena el formulario y hace clic en Insertar, quiero guardar el texto ingresado en otra tabla en la base de datos usando este código. No funciona. ¿Puedes decirme dónde está mi error?
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
el mensaje de error se ve así cuando hago clic en "insertar"
Debe recuperar los controles reales que se crean en button1_click en lugar de sus identificadores que almacena en el estado de la sesión.
Sin embargo, debido a que estos controles se crean dinámicamente en tiempo de ejecución, su código se volverá sustancialmente más complejo porque tendrá que agregar todos los controles a la página cada vez que se invoca a Page Init. Vea los siguientes artículos para información adicional:
Resumen del ciclo de vida de la página ASP.NET
Ver controles estatales y dinámicamente agregados
Controles web dinámicos, devoluciones y estado de vista
En función de la complejidad que esto presenta, sugiero un enfoque más directo en el que tenga varias etiquetas y cuadros de texto en la página, pero ocultos por los atributos de CSS ( display: none; visibility: hidden
).
Un enfoque aún mejor es usar un control de cuadrícula, que es ideal para este tipo de comportamiento. Hay muchos ejemplos aquí:
Es su ... = Session("FUt").Text
y ... = Session("FUDt").Text
.
Estas son cadenas, y .Text
está intentando llamar a una propiedad que no existe.
Por favor revisa este artículo
Creación de formularios dinámicos de recolección de datos basados en la web y fáciles de usar