Foro Oficial de C#

Al menos si describiera bien el problema se le daba alguna idea pero eso que escribiste no sirve para nada.

Tengo que crear un formulario dinámico... este formulario de preguntas y respuestas me las dará un consumo de un ws en forma de array... este array tendra un numero n de preguntas con un numero n de respuestas para cada pregunta...

y necesito pintar esto en un formulario.... por razones que no es un nuevo proyecto... esto se tiene que hacer en c# asp.net no en mvc...

espero haberme hecho entender...

Mira tengo la siguiente para pintar o crear el formulario de preguntas y respuestas....
for (int j = 0; j < aux2; j++){
rbl_respuestas = new RadioButtonList[aux2];


rbl_respuestas[j] = new RadioButtonList();

rbl_respuestas[j].ID = "rbl_respuestas" + i;


rbl_respuestas[j].Items.Add(new ListItem(cuestionario_zp.listadoPreguntasField.listadoRespuestasField[j].textoRespuestaField,
cuestionario_zp.listadoPreguntasField.listadoRespuestasField[j].secuenciaRespuestaField.ToString()));

pnl_formulario_confronta.Controls.Add(rbl_respuestas[j]);

}

Esto me genera el formulario de pregunta como lo quiero... osea dinámico...

pero no puedo acceder a los items seleccionados por el usuario.... desde un evento de un boton enviar

Agradezco ideas....

Gracias...
 
Última edición:
@webcarlosf La clase RadioButtonList hereda de la clase Control.
En el evento del botón enviar itere los controles de la vista y evalúe solo los que sean de tipo Radiobuttonlist.

Código:
foreach (Control control  in Contenedor)
{
    if (control is RadioButtonList)
    {
      // obtengo la respuesta seleccionada de cada pregunta y la proceso...
     }
}
 
  • Me gusta
Reacciones: webcarlosf
Hola a todos... una pregunta... tengo un formulario de preguntas dinámico creado... con RadioButtonList dinámicos... así..
for (int i = 0; i < aux1; i++)
rbl = new RadioButtonList();
for (int j = 0; j < aux2; j++) {
rbl.ID = "rbl_respuestas" + i;
rbl.SelectedIndex = 0;
rbl.Items.Add(new ListItem(cuestionario_zp3.listadoPreguntasField.listadoRespuestasField[j].textoRespuestaField,
cuestionario_zp3.listadoPreguntasField.listadoRespuestasField[j].secuenciaRespuestaField.ToString()));
}
pnlMain.Controls.Add(rbl);
pnlMain.Controls.Add(new LiteralControl(" "));
}

E intento leer las respuesta seleccionadas por el usuario así... en un evento de un botón enviar...
foreach (Object chkb in pnlMain.Controls) {
if (chkb is RadioButtonList) {
RadioButtonList rbl = chkb as RadioButtonList;
var result = new RespuestaPreguntaULTRADTO {
secuenciaPregunta = Convert.ToInt32(rbl.SelectedValue),
secuenciaRespuesta = Convert.ToInt32(rbl.SelectedValue)
};
respuestas.Add(result);
}

De esta forma nuca el if es true ....

Y de esta otra forma siempre me escoje el primer valor...

for (int i = 0; i < aux1; i++) {
Control myControl1 = this.pnlMain.FindControl("rbl_respuestas" + i);
RadioButtonList radios = (RadioButtonList)this.pnlMain.FindControl("rbl_respuestas" + i);
var result = new RespuestaPreguntaULTRADTO {
secuenciaPregunta = Convert.ToInt32(radios.SelectedValue),
secuenciaRespuesta = Convert.ToInt32(radios.SelectedValue)
};
respuestas.Add(result);
}

Alguna idea de como puedo obtener las respuestas del usuario... o si ay otra forma de hacerlo...

Gracias....
 
Hola a todos... una pregunta... tengo un formulario de preguntas dinámico creado... con RadioButtonList dinámicos... así..
for (int i = 0; i < aux1; i++)
rbl = new RadioButtonList();
for (int j = 0; j < aux2; j++) {
rbl.ID = "rbl_respuestas" + i;
rbl.SelectedIndex = 0;
rbl.Items.Add(new ListItem(cuestionario_zp3.listadoPreguntasField.listadoRespuestasField[j].textoRespuestaField,
cuestionario_zp3.listadoPreguntasField.listadoRespuestasField[j].secuenciaRespuestaField.ToString()));
}
pnlMain.Controls.Add(rbl);
pnlMain.Controls.Add(new LiteralControl(" "));
}

E intento leer las respuesta seleccionadas por el usuario así... en un evento de un botón enviar...
foreach (Object chkb in pnlMain.Controls) {
if (chkb is RadioButtonList) {
RadioButtonList rbl = chkb as RadioButtonList;
var result = new RespuestaPreguntaULTRADTO {
secuenciaPregunta = Convert.ToInt32(rbl.SelectedValue),
secuenciaRespuesta = Convert.ToInt32(rbl.SelectedValue)
};
respuestas.Add(result);
}

De esta forma nuca el if es true ....

Y de esta otra forma siempre me escoje el primer valor...

for (int i = 0; i < aux1; i++) {
Control myControl1 = this.pnlMain.FindControl("rbl_respuestas" + i);
RadioButtonList radios = (RadioButtonList)this.pnlMain.FindControl("rbl_respuestas" + i);
var result = new RespuestaPreguntaULTRADTO {
secuenciaPregunta = Convert.ToInt32(radios.SelectedValue),
secuenciaRespuesta = Convert.ToInt32(radios.SelectedValue)
};
respuestas.Add(result);
}

Alguna idea de como puedo obtener las respuestas del usuario... o si ay otra forma de hacerlo...

Gracias....

Hola.

En este caso debes hacer uso de metodos recursivos, ya que si tienes un objeto dentro de un control que a su vez esta dentro de otro control solo leera lo que se encuentre en la priemra capa.. un ejemplo seria mas o menos.

PHP:
private void Respuestas(Control ctrl)
        {           
            if(!ctrl.HasChildren)
            {
                foreach (Control chkb in ctrl.Controls)
                {
                    if (chkb is RadioButtonList)
                    {
                        RadioButtonList rbl = chkb as RadioButtonList;
                        var result = new RespuestaPreguntaULTRADTO
                        {
                            secuenciaPregunta = Convert.ToInt32(rbl.SelectedValue),
                            secuenciaRespuesta = Convert.ToInt32(rbl.SelectedValue)
                        };
                        respuestas.Add(result);
                    }
                }
            }
            else
            {
                Respuestas(ctrl);
            }
        }


SuerteX :)
 
  • Me gusta
Reacciones: webcarlosf
Saludos una consulta... tengo dos griedview en una misma pagina aspx y de cada una quiero poder seleccionar una fila a la vez utilizando un radio button o algo parecido.... intente con javascript pero captura el evento pero solo captura el evento de una sola gridview...

alguna idea...

lo mas probable ya esto lo preguntaron .... pero ayuda.... jejeje... gracias...
 
Saludos una consulta... tengo dos griedview en una misma pagina aspx y de cada una quiero poder seleccionar una fila a la vez utilizando un radio button o algo parecido.... intente con javascript pero captura el evento pero solo captura el evento de una sola gridview...

alguna idea...

lo mas probable ya esto lo preguntaron .... pero ayuda.... jejeje... gracias...
es algo así

pues aun no le veo necesario javascript, Necesita crear una columna de tipo checkbox en el gridview que no este asociada al datasource y el usuario pueda seleccionar.
Código:
 <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:CheckBox ID="chkRow" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Nombre" />
    </Columns>

y así se recorre una vez haga el submit del formulario o el evento que quiera

Código:
foreach (GridViewRow row in GridView1.Rows)
    {
        if (row.RowType == DataControlRowType.DataRow)
        {
            CheckBox chkRow = (row.Cells[0].FindControl("chkRow") as CheckBox);
            if (chkRow.Checked)
            {
                // hago lo que sea con esa fila seleccionada.
            }
        }
    }

tal vez le ayude:
http://www.aspsnippets.com/Articles/GridView-with-CheckBox-Get-Selected-Rows-in-ASPNet.aspx
Saludos.
 
es algo así

pues aun no le veo necesario javascript, Necesita crear una columna de tipo checkbox en el gridview que no este asociada al datasource y el usuario pueda seleccionar.
Código:
 <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:CheckBox ID="chkRow" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Nombre" />
    </Columns>

y así se recorre una vez haga el submit del formulario o el evento que quiera

Código:
foreach (GridViewRow row in GridView1.Rows)
    {
        if (row.RowType == DataControlRowType.DataRow)
        {
            CheckBox chkRow = (row.Cells[0].FindControl("chkRow") as CheckBox);
            if (chkRow.Checked)
            {
                // hago lo que sea con esa fila seleccionada.
            }
        }
    }

tal vez le ayude:
http://www.aspsnippets.com/Articles/GridView-with-CheckBox-Get-Selected-Rows-in-ASPNet.aspx
Saludos.

Gracias... lo que yo quiero es poder seleccionar una sola fila... osea poder seleccionar una respuesta de varias que tengo en el gridview... como si fuera un radiobuttonlist...
 
Hola chicos, tengo una duda sobre que tipo de arquitectura implementar, el lío es bastante común y deseo hacer una solución genérica.

El escenario es el siguiente:

En una solución existen varios proyectos y entre esos proyectos se comparten "objetos" comunes ejemplo el "combo" y la idea es hacer que este sea genérico para todos los proyectos, independiente de la información que lo poblé, debido a que siempre tiene un valor y una descripción.

La idea es que sea genérico para todos los proyectos en la solución, algo así como :

Proyetco1.combo.MetodosQuellenanComboUnicamenteQuePertenezcaAlProyecto1
Proyetco2.combo.MetodosQuellenanComboUnicamenteQuePertenezcaAlProyecto2
Proyetco3.combo.MetodosQuellenanComboUnicamenteQuePertenezcaAlProyecto3

Otro escenario podría ser:

combo.Proyecto1.MetodosQuellenanComboUnicamenteQuePertenezcaAlProyecto1
combo.Proyecto2.MetodosQuellenanComboUnicamenteQuePertenezcaAlProyecto2
combo.Proyecto3.MetodosQuellenanComboUnicamenteQuePertenezcaAlProyecto3

Aquí lo importante es que al invocar el combo (que es lo común) y llame el proyecto solo muestren los métodos que pertenecen a ese proyecto.

Lo he tratado de hacer como clases heredadas o con la "propiedad" Implements, pero ninguna me convence.
Jóvenes Laneros que recomendarían para poder hacerlo así de desacoplado ??
 
En ese caso esta mal diseñado, deberías tener una librería con esos controles, la librería sería un único proyecto del mismo tipo (no se si es Forms, WCF o web) desde los demás proyectos lo referencias para poder utilizar dichos controles que seguramente deben heredar de UserControl o similar según la tecnología que estés usando.
 
Gracias por la respuesta Juank. Mas en detalle:
Es en WCF, la arquitectura es: una capa de Acceso a Datos, una capa de Logica de Negocios , luego wcf y finalmente la IU
Cada proyecto de la solución tiene su propia WCF, su propia Iu etc.

Proyecto1 con su wcf1
Proyecto2 con su wcf2
Proyecto3 con su wcf3

Ahora hay un WCF común para los 3 que expone métodos comunes entre todos, por ejemplo información de usuarios y demás información genérica, es en este proyecto donde me gustaría poder exponer una clase genérica de "Combo", exponiendo los métodos de llenado de "combos" que correspondan al proyecto.
Actualmente al referenciar "combos" trae todos los métodos, y cada proyecto selecciona el que necesita, hasta ahí "no hay lio" en cuanto funcionalidad.
Pero se desea que no se vean todos los métodos de "combos" sino los que pertenecen a su proyecto. No se si fui mas claro.

En su momento se desarrollo la arquitectura de esa manera, por que como por variar las cosas eran para antier jejeje. y ahora se desea optimizar.
Nota: Me gustaría saber cual seria la mejor manera de hacerlo, mas no que hicieran la tarea.
 
Si mal no entiendo es esto lo que se quiere:


Como cada projecto maneja sus combobox a su manera, en cada projecto se haria un repositorio que implementara la interfaz comun que tendria los metodos comunes para el combobox pero con su propia implementacion, pongo los repositorio internal por que solo quiero que se vea en el namespace del projecto en que se este manejando y no en los demas inclusive si ellos tienen referencia del projecto por ejemplo projecto 2 tiene referencia del 1 aun así el repositorio del projecto 1 no se vera en el 2.


Código:
Esta interfaz iria en el projecto donde tienen lo comun
public interface ICombo<T>
{
        //Metodos inventados a la loca
        List<T> MetodoComun1();
        T MetodoComun2();
        string MetodoComun3(T Valor)
}

internal class RepositorioComboBoxProjecto1: ICombo<Persona>
{
         List<Persona> MetodoComun1()
        {//Implementacion para el projecto 1}

        Persona MetodoComun2()
        {//Implementacion para el projecto 1}

        string MetodoComun3(Persona Valor)
        {//Implementacion para el projecto 1}
}

internal class RepositorioComboBoxProjecto2: ICombo<Ciudad>
{
        List<Ciudad> MetodoComun1()
        {//Implementacion para el projecto 2}

        Ciudad MetodoComun2()
        {//Implementacion para el projecto 2}

        string MetodoComun3(Ciudad Valor)
        {//Implementacion para el projecto 2}

}

Haciendo eso tenemos la certeza por ejemplo de que el repositorio del projecto 1 que maneja el combobox solo va a ser implementado en ese projecto y por ningun projecto mas y en caso de que aparezca los projecto 4,5,6 y necesiten implementar sus propios metodos para llenar los combobox solo seria crear el repositorio4 por ejemplo para el projecto4 que herede de la Interfaz ICombo y ustedes le daran el mensaje apropiado a cada metodo teniendo la certeza de que ese repositorio no sera utilizado en ningun otro projecto.

pss y para utilizar el repositorio hay muchas maneras, la mas sencilla en la clase que necesites utilizar para llenar el combobox en el projecto1 seria:

Código:
public class ClaseDondeSeUtilizaELRepositorioDelProjecto1
{
        private readonly ICombo<Persona> _repositorioComboBox;

         //Constructor
        public class ClaseDondeSeUtilizaELRepositorioDelProjecto1()
        {
            _repositorioComboBox = new RepositorioComboBoxProjecto1();
        }       

         //Utilizar el repositorio es sencillo
       void cualquiera()
         {
            _repositorioComboBox.MetodoComun1();
            _repositorioComboBox.MetodoComun2();
            _repositorioComboBox.MetodoComun3();
         }
}

Espero que sea eso lo que necesitas.

Lo ultimo se puede mejorarar con injeccion de dependencia a traves de Unity pero dado el arroz con mago que veo que tienen allá seria mejor implementarlo de esta forma sencilla asi sea que la clase donde se implemente el repositorio quede atadado a este, pero como es para ayer mejor asi XD
 
  • Me gusta
Reacciones: Dr4gnu5
Pero ojo que internal limita la visibilidad solo dentro del mismo ensamblado, cualquier cosa marcada como internal tiene full visibilidad solo dentro del ensamblado actual, no fuera de el.
---
Si quieres tener métodos que solo sean visibles para determinado proyecto entonces de plano no puede ser todo en el mismo servicio ni por arquitectura ni por implementación.
En ese caso deberías tener una clase (servicio) por cada proyecto que la deba consumir, es decir un service layer para cada proyecto, no importa si en un solo proyecto WCF están todos los services Layer de los otros proyectos de FrontEnd.
 
Juank
Como internal limita la visibilidad al propio ensamblado, vos propones una clase (servicio) por cada proyecto que la deba consumir,
service layer transversal a los proyectos no ???,
 
Juank
Como internal limita la visibilidad al propio ensamblado, vos propones una clase (servicio) por cada proyecto que la deba consumir,
service layer transversal a los proyectos no ???,
Si, que por lo que intuyo son varios proyectos del mismo modelo de negocio. Entonces el service layer puede ser transversal, con servicios comunes para todas las unidades (proyectos) y tambien servicios específicos para cada una.
 
Si, que por lo que intuyo son varios proyectos del mismo modelo de negocio. Entonces el service layer puede ser transversal, con servicios comunes para todas las unidades (proyectos) y tambien servicios específicos para cada una.

Pero ese cambio impacta bastante por lo que veo, como el dijo que lo queria para allá por eso pense que seria mas facil utilizar su estructura para llevarlo a cabo lo antes posible y sin que impactara tanto, pero es cierto eso deben reestructurarlo completamente. El solo hecho de que tengan una clase que ofrece que hace de todo y que se escoja de alli lo que se necesite da bastante miedo XD

Lo de internal si se me olvidaba que era por emsablado y no solo por ns XD
 
Hasta ahora no veo porqué no mantener la estructura que
tiene ahora y jugar con namespaces por proyecto para que
se muestre sólo info de cada proyecto... eso a corto plazo...

A mediano/largo plazo si toca reestructurar todo pensando
en posibles cambios a futuro...
 
VIDEO "CONSUMIENDO WEBAPI DESDE FIDDLER | C#"
Este es uno de mis videos recientes, se los comparto.
--------
WebAPI
es un poderoso framework que nos permite crear servicios web basados en HTTP de manera rápida y tomando como base los estandares de la industria actual.

WebAPI provee las funcionalidades necesarias para crear servicios RESTFull y este a su vez permite que cualquier cliente (Apps móviles, browser etc.) se conecte con el servicio sin este tener conocimiento previo de las estructuras alojadas en el servidor, ente otras cosas más.

Fiddler, por otro lado, es una herramienta indispensable en el kit de desarrollo de todo programador web o que consuma servicios web, un poderoso HTTP debugguer que te permite llevar tus skills al máximo potencial en el proceso de creación de servicios web y en el complejo proceso de depuración y seguimiento de errores que se suelen encontrar en consultorias.

En este video les muestro como integrar estas dos super herramientas para que TU como DESARROLLADOR explotes el máximo potencial de tus habilidades.

 
Hola saludos... alguno sabe como solucionar esto...

No se puede cargar el archivo o ensamblado 'AjaxControlToolkit' ni una de sus dependencias. Este ensamblado se creó con un tiempo de ejecución más reciente que el tiempo de ejecución cargado actualmente y no se puede cargar

La referencia no la tengo en ninguna parte de mi solución... agradezco ayuda...
 
  • Me gusta
Reacciones: jufequinta

Los últimos temas