none
Cargar datos a un dropdownlist asp.net c# por capas RRS feed

  • Pregunta

  • Buenas. Necesito ayuda. 

    Quiero cargar datos a un dropdownlist desde sql server. Estoy trabajando en asp .net C# programacion en 3 capas. 

    Les Muestro el còdigo donde tengo problema.:

    Este es mi capa de Datos

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using CapaEntidades;
    using System.Data.SqlClient;
    using System.Data;
    
    
    
    
    
    
    
    
    namespace CapaDatos
    {
        public class DocumentoD
        {
    
            #region "PATRON SINGLETON"
            private static DocumentoD dDocumento = null; //atributo de tipo 
            private DocumentoD() { } //se oculta el constructor
            //metodo publico para retornar la instacia de Conexion
            public static DocumentoD getInstancia()
            {
                if (dDocumento == null) //si no se instancia conexion
                {
                    dDocumento = new DocumentoD(); // se crea una nueva instancia
                }
                return dDocumento;
            }
            #endregion
    
            public List<rhDocumento> listarDocumentos()
            {
                List<rhDocumento> listarDocumentos = new List<rhDocumento>();
                SqlConnection conexion = null;
                SqlCommand cmd = null;
                SqlDataReader dr = null;
                try
                {
                    conexion = Conexion.getInstancia().conexionBD();
                    cmd = new SqlCommand("rh_SpMostrarHorarios", conexion);
                    cmd.CommandType = CommandType.StoredProcedure;
                    conexion.Open();
                    dr = cmd.ExecuteReader();
    
    
                    while (dr.Read())
                    {
                        // Crear objetos de tipo rhHorarios
                        rhDocumento objDocumento = new rhDocumento();
                        objDocumento.Descripcion = dr["schName"].ToString();             
                        
    
    
                        // añadir a la lista de objetos
                        listarDocumentos.Add(objDocumento);
                    }
    
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    conexion.Close();
                }
    
                return listarDocumentos;
            }
    
    
    
    
        }
    }
    

    Este es mi capa de Negocio:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using CapaEntidades;
    using CapaDatos;
    
    namespace CapaNegocio
    {
       public  class DocumentoN
        {
    
            #region "PATRON SINGLETON"
            private static DocumentoN documentoln = null;
            private DocumentoN() { } //se oculta el constructor
            //metodo publico para retornar la instacia de Conexion
            public static DocumentoN getInstancia()
            {
                if (documentoln == null) //si no se instancia conexion
                {
                    documentoln = new DocumentoN(); // se crea una nueva instancia
                }
                return documentoln;
            }
            #endregion
    
    
            public  List<rhDocumento> listarDocumentos()
            {
                try
                {
                    return DocumentoD.getInstancia().listarDocumentos();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
    }
    

    Esta es la capa de presentacion:

    Aca es donde trengo problema: cboTipoDocumento.DataSource = DocumentoN.listarDocumentos();

    Al querer llamar al metodo listarDocumentos me da error. Y no puedo asignarle al dropdownlist.

    El error dice:se requiere una referencia de objeto para el campo método o propiedad no estáticos

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using CapaEntidades;
    using CapaNegocio;
    using System.Web.Services;
    using System.Web.Script.Serialization;
    
    namespace CapaPresentacion
    {
        public partial class frmMesaEntrada : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                cboTipoDocumento.DataSource = DocumentoN.listarDocumentos();
            }
    
            protected void btnRegistrar_Click(object sender, EventArgs e)
            {
                rhExpediente expediente = GetEntidad();
                bool resp = ExpedienteN.getInstancia().registrarExpediente(expediente);
    
                if (resp == true)
                {
                    Response.Write("<script>alert('REGISTRO CORRECTO.')</script>");
                }
                else
                {
                    Response.Write("<script>alert('REGISTRO INCORRECTO.')</script>");
                }
            }
    
            private rhExpediente GetEntidad()
            {
                rhExpediente objExpediente = new rhExpediente();
                objExpediente.Documento = txtDocumento.Text;
                objExpediente.Descripcion = txtDescripcion.Text;
                objExpediente.NroEntrada = txtNroEntrada.Text;
                objExpediente.IdTipoDocumento = cboTipoDocumento.SelectedValue;
                objExpediente.IdTipoFormulario = cboTipoFormulario.SelectedValue;
                //objHorario.Tolerancia = Convert.ToInt32(txttolerancia.Text);
                return objExpediente;
            }
    
        }
    }

    domingo, 17 de marzo de 2019 14:11

Todas las respuestas

  • El error dice:se requiere una referencia de objeto para el campo método o propiedad no estáticos

    Eso es porque el método listarDocumentos no es estático, pero lo estás intentando llamar como si fuera estático, es decir, le estás anteponiendo el nombre de la clase en lugar de una instancia de la clase.

    Lo razonable sería construir esa instancia que te falta aprovechando el método que ya existe dentro de la clase para construir la instancia. Es decir:

    DocumentoN instancia = DocumentoN.getInstancia()
    cboTipoDocumento.DataSource = instancia.listarDocumentos();


    domingo, 17 de marzo de 2019 18:30