
Guardar controles dinámicos de un generador de encuestas en sql server
Publicado por abner coronado (2 intervenciones) el 22/01/2016 01:14:13
Diseñe un "generador de encuestas" con controles dinámicos para que se agregue un textbox para la pregunta, un dropdownlist para el tipo de pregunta y un botón para agregar dinamicamente input's para las repuestas, mi problema es que no he encontrado un ejemplo o una idea para guardar todos los valores. Les agradezco su atención.
Este es mi código en el evento page_load
Con este botón genero una nueva pregunta
y por el lado del cliente esta es una parte de la página
Este es mi código en el evento page_load
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (!IsPostBack) //cuando es la primera carga genera la primera pregunta
{
txtpreg = new TextBox[0];
ddl = new DropDownList[0];
pnl = new Panel[0];
hpy = new HyperLink[0];
LiteralControl lt = new LiteralControl("<div class=\"form-group\"><label class=\"control-label col-md-4\">Pregunta:</label><div class=\"col-md-8\">");
placeh.Controls.Add(lt);
TextBox txt = new TextBox();
txt.ID = "txtpreg" + "0";
txt.Attributes.Add("class", clase);
placeh.Controls.Add(txt);
// txtpreg[i] = txt;
LiteralControl ltr = new LiteralControl("</div></div>");
placeh.Controls.Add(ltr);
LiteralControl ltrc = new LiteralControl("<div class=\"form-group\"><label class=\"control-label col-md-4\">Tipo de Respuesta:</label><div class=\"col-md-8\">");
placeh.Controls.Add(ltrc);
DropDownList ddlist = new DropDownList();
ddlist.ID = "ddl" + "0";
ddlist.Attributes.Add("class", clase);
ddlist.Items.Add(new ListItem("-- seleccione --", "0"));
ddlist.Items.Add(new ListItem("Opción Multiple", "1"));
ddlist.Items.Add(new ListItem("Una Opción", "2"));
ddlist.Items.Add(new ListItem("Respuesta Abierta", "3"));
placeh.Controls.Add(ddlist);
LiteralControl ltc = new LiteralControl("</div></div>");
placeh.Controls.Add(ltc);
LiteralControl ltcr = new LiteralControl("<div class=\"form-group\"><label class=\"control-label col-md-4\">Agregar Respuesta:</label><div class=\"col-md-8\">");
placeh.Controls.Add(ltcr);
Panel div = new Panel();
div.ID = "pnl" + "0";
HyperLink hp = new HyperLink();
hp.ID = "a-" + "0";
hp.Attributes.Add("class", "btn blue btn-outline nvo");
hp.ClientIDMode = System.Web.UI.ClientIDMode.Static;
hp.NavigateUrl = "javascript:void(0);";
hp.Text = "+";
div.Controls.Add(hp);
placeh.Controls.Add(div);
LiteralControl lcb = new LiteralControl("</div></div>");
placeh.Controls.Add(lcb);
conteo = conteo + 1;
}
else
{
//no hacer nada
}
}
catch (Exception)
{
throw;
}
}
Con este botón genero una nueva pregunta
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
protected void btnadd_Click(object sender, EventArgs e) //agrega nuevas preguntas
{
conteo = conteo + 1;
txtpreg = new TextBox[conteo];
ddl = new DropDownList[conteo];
pnl = new Panel[conteo];
hpy = new HyperLink[conteo];
int i;
for (i = 0; i < conteo; i += 1) //lee el valor de conteo para asi determinar el id consecutivo en la pregunta
{
LiteralControl lt = new LiteralControl("<div class=\"form-group\"><label class=\"control-label col-md-4\">Pregunta:</label><div class=\"col-md-8\">");
placeh.Controls.Add(lt);
TextBox txt = new TextBox();
txt.ID = "txtpreg" + i.ToString();
txt.Attributes.Add("class", clase);
placeh.Controls.Add(txt);
txtpreg[i] = txt;
LiteralControl ltr = new LiteralControl("</div></div>");
placeh.Controls.Add(ltr);
LiteralControl ltrc = new LiteralControl("<div class=\"form-group\"><label class=\"control-label col-md-4\">Tipo de Respuesta:</label><div class=\"col-md-8\">");
placeh.Controls.Add(ltrc);
DropDownList ddlist = new DropDownList();
ddlist.ID = "ddl" + i.ToString();
ddlist.Attributes.Add("class", clase);
ddlist.Items.Add(new ListItem("-- seleccione --", "0"));
ddlist.Items.Add(new ListItem("Opción Multiple", "1"));
ddlist.Items.Add(new ListItem("Una Opción", "2"));
ddlist.Items.Add(new ListItem("Respuesta Abierta", "3"));
placeh.Controls.Add(ddlist);
ddl[i] = ddlist;
LiteralControl ltc = new LiteralControl("</div></div>");
placeh.Controls.Add(ltc);
LiteralControl ltcr = new LiteralControl("<div class=\"form-group\"><label class=\"control-label col-md-4\">Agregar Respuesta:</label><div class=\"col-md-8\">");
placeh.Controls.Add(ltcr);
Panel div = new Panel();
div.ID = "pnl" + i.ToString();
HyperLink hp = new HyperLink();
hp.ID = "a-" + i.ToString();
hp.Attributes.Add("class", "btn blue btn-outline nvo");
hp.ClientIDMode = System.Web.UI.ClientIDMode.Static;
hp.NavigateUrl = "javascript:void(0);";
hp.Text = "+";
div.Controls.Add(hp);
placeh.Controls.Add(div);
pnl[i] = div;
hpy[i] = hp;
LiteralControl lcb = new LiteralControl("</div></div>");
placeh.Controls.Add(lcb);
}
}
y por el lado del cliente esta es una parte de la página
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
asp:UpdatePanel ID="up1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div class="form-wizard">
<div runat="server" id="placeh" class="form-body">
<%--Aqui se agregara el div FORM-BODY con los elementos dinamicos--%>
</div>
</div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnadd" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="btndel" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
$(document).ready(function () {
$(".nvo").click(function () {
var ids = $(this).attr('id');
var valor = ids.substring(2);
var parent = $(this).parent().attr('id');
var idpadre = parent.substring(3);
if ($('#' + parent).children().find('input').length != 0) {
//traer el ultimo id del txt agregado y sumarle 1
var txt = $('#' + parent).children().find('input').last().attr('id');
var idnum = txt.lastIndexOf('-');
var result = txt.substring(idnum + 1);
result++;
var divs = $('<div class="form-group"><label class="control-label col-md-4">Respuesta ' + result + ':</label><div class="col-md-8"><input id="txt' + idpadre + '-' + result + '" class="form-control" type="text"></input></div></div>');
$('#pnl' + idpadre).append(divs);
}
else {
var divs = $('<div class="form-group"><label class="control-label col-md-4">Respuesta ' + 1 + ':</label><div class="col-md-8"><input id="txt' + idpadre + '-1' + '" class="form-control" type="text"></input></div></div>'); //si no trae existe un txt dentro del panel parent se genera un nuevo elemento
$('#pnl' + idpadre).append(divs);
}
});
Valora esta pregunta


0