protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                string CadenaConexion = "";
                CadenaConexion = ConfigurationManager.ConnectionStrings["ConexionPrincipal"].ConnectionString;
                Clientes_DAL    clienteDAL = new Clientes_DAL();
                DataTable       dt         = new DataTable();
                ReportParameter p;
                //asignacion de posibles parametros para obtener los datos para el reporte
                //este es en el caso de imprimir los datos de un cliente seleccionado
                if (Session["ID"] != null && Session["ID"].ToString() != "")
                {
                    dt = clienteDAL.Clientes_Reporte(CadenaConexion, null, Convert.ToInt32(Session["ID"].ToString()));
                    p  = new ReportParameter("Titulo", "Reporte Registro de Cliente Individual");
                }
                //este es en el que se desee imprimir los datos obtenidos de una busqueda filtrada
                else if (Session["busqueda"] != null && Session["busqueda"].ToString() != "")
                {
                    dt = clienteDAL.Clientes_Reporte(CadenaConexion, Session["busqueda"].ToString());
                    p  = new ReportParameter("Titulo", "Reporte Registro de Clientes General");
                }
                //este es en el caso en el que se este trayendo los datos de un cliente recien creado, dado que la identificacion sera unica en la base de datos, se usa este dato
                else if (Session["identificacion"] != null && Session["identificacion"].ToString() != "")
                {
                    dt = clienteDAL.Clientes_Reporte(CadenaConexion, null, 0, Convert.ToDouble(Session["identificacion"]));
                    p  = new ReportParameter("Titulo", "Reporte Registro de Cliente Individual");
                }
                //este es en el caso que se traiga la lista completa de clientes
                else
                {
                    dt = clienteDAL.Clientes_Reporte(CadenaConexion);
                    p  = new ReportParameter("Titulo", "Reporte Registro de Clientes General");
                }
                DataView dv = dt.DefaultView;
                //para ordenrar los registros de la data table de forma alfabetica
                dv.Sort = "NOMBRE_COMPLETO";
                dt      = dv.ToTable();

                //generacion del reporte
                ReportViewer1.ProcessingMode         = ProcessingMode.Local;
                ReportViewer1.LocalReport.ReportPath = Server.MapPath("ReporteCliente.rdlc");
                ReportViewer1.SizeToReportContent    = true;
                ReportViewer1.Width  = Unit.Percentage(100);
                ReportViewer1.Height = Unit.Percentage(100);
                ReportViewer1.LocalReport.DataSources.Clear();
                List <ReportParameter> par = new List <ReportParameter>();
                par.Add(p);
                ReportViewer1.LocalReport.SetParameters(par);
                ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("DataSet1", dt));
                ReportViewer1.LocalReport.Refresh();
            }
        }
        protected void btnConfirmarBorrar_Click(object sender, EventArgs e)
        {
            //accion que me abre el modal para confirmar el borrado de un cliente.
            string CadenaConexion = "";

            CadenaConexion = ConfigurationManager.ConnectionStrings["ConexionPrincipal"].ConnectionString;
            Clientes_DAL clienteDAL = new Clientes_DAL();

            clienteDAL.Clientes_Acciones(CadenaConexion, 'B', null, Convert.ToInt32(txtID.Text.ToString()));
            txtID.Text = "";
            CargarLista();
        }
        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            string busqueda       = txtBusqueda.Text.ToString();
            string CadenaConexion = "";

            CadenaConexion = ConfigurationManager.ConnectionStrings["ConexionPrincipal"].ConnectionString;
            Clientes_DAL clienteDAL = new Clientes_DAL();

            //verifico que mi string no sea nulo, si es nulo mando a traer la lista completa, en caso que no simplemente filtro por resultados parecidos al escrito en la base de datos"
            if (string.IsNullOrEmpty(busqueda) == false)
            {
                lst_clientes = clienteDAL.Clientes_Leer_Busqueda(CadenaConexion, busqueda);
            }
            else
            {
                lst_clientes = clienteDAL.Clientes_Leer_Busqueda(CadenaConexion);
            }
            LlenarGrid();
            Session["busqueda"] = busqueda;
        }
        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            //realizo la validacion de nombre comppleto y de telefono en ambos escenarios antes de proceder al guardado, si vienen validos, prosigo.
            if (ValidarNombreCompleto() == false && ValidarTelefono() == false)
            {
                string CadenaConexion = "";
                CadenaConexion = ConfigurationManager.ConnectionStrings["ConexionPrincipal"].ConnectionString;
                Clientes_DAL clienteDAL = new Clientes_DAL();
                Clientes     cliente    = new Clientes();
                cliente.IDENTIFICACION  = Convert.ToDouble(txtIdentificacion.Text.ToString());
                cliente.NOMBRE_COMPLETO = txtNombreCompleto.Text.ToString();
                cliente.TELEFONO        = Convert.ToDouble(txtTelefono.Text.ToString());

                //sesion de guardado para conocer cuando estoy actualizando o ingresando
                if (Convert.ToInt32(Session["Guardado"]) == 1)
                {
                    cliente.ID = Convert.ToInt32(txtID.Text.ToString());
                    clienteDAL.Clientes_Acciones(CadenaConexion, 'A', cliente, cliente.ID);
                    lblSuccess.Text = "Registro actualizado satisfactoriamente.";
                }
                //valido si la identificacione es correcta a la hora de crear un nuevo registro, dado que no necesito validarla en la accion de actualizar porque no es editable.
                else if (Convert.ToInt32(Session["Guardado"]) == 0 && ValidarIdentificacion() == false)
                {
                    clienteDAL.Clientes_Acciones(CadenaConexion, 'I', cliente);
                    Session["identificacion"] = txtIdentificacion.Text.ToString();
                    lblSuccess.Text           = "Registro guardado satisfactoriamente.";
                }
                txtID.Text = "";
                CargarLista();
                ScriptManager.RegisterStartupScript(this, this.GetType(), "SuccessModal", "openSuccessModal();", true);
                //a la hora de guardar ejecuto un script en el servidor para abrir una nueva ventana que me lleva al reporte que me mostrara al cliente recien creado.
                string script = "window.open('Report.aspx','_blank');";
                ClientScript.RegisterStartupScript(GetType(), "Navigation", script, true);
            }
            else
            {
                //script para reabrir el modal cuando sea cerrado por el postback del sitio.
                ScriptManager.RegisterStartupScript(this, this.GetType(), "OpenModal", "openEditModal();", true);
            }
        }
        protected bool ValidarIdentificacion()
        {
            //metodo para validar la identificacion ingresada previo a guardar
            string CadenaConexion = "";

            CadenaConexion = ConfigurationManager.ConnectionStrings["ConexionPrincipal"].ConnectionString;
            Clientes_DAL clienteDAL = new Clientes_DAL();

            //valido si tiene espacios en blanco o si viene nulo
            if (string.IsNullOrEmpty(txtIdentificacion.Text.ToString()) == true || string.IsNullOrWhiteSpace(txtIdentificacion.Text.ToString()) == true)
            {
                txtIdentificacionError.Text    = "Este campo no puede estar vacío.";
                txtIdentificacionError.Visible = true;
                return(true);
            }
            //valido si el numero de caracteres ingresados es mayor a 10 a como es su equivalente en la base de datos.
            if (txtIdentificacion.Text.ToString().Length > 10)
            {
                txtIdentificacionError.Text    = "Este campo solo puede tener 10 caracteres.";
                txtIdentificacionError.Visible = true;
                return(true);
            }
            //verifico si en los registros existentes ya hay un registro con esta identificacion
            List <Clientes> clientes = clienteDAL.Clientes_Leer_Busqueda(CadenaConexion);

            for (int i = 0; i < clientes.Count; i++)
            {
                if (clientes[i].IDENTIFICACION == Convert.ToDouble(txtIdentificacion.Text.ToString()))
                {
                    txtIdentificacionError.Text    = "Esta identificación ya existe.";
                    txtIdentificacionError.Visible = true;
                    return(true);
                }
            }
            txtIdentificacionError.Text    = "";
            txtIdentificacionError.Visible = false;
            return(false);
        }
        protected void asignar_valores(int ID)
        {
            //a la hora de seleccionar un elemento de mi grid view, asigno los valores antes de abrir el Modal de mantenimiento
            string CadenaConexion = "";

            CadenaConexion = ConfigurationManager.ConnectionStrings["ConexionPrincipal"].ConnectionString;
            Clientes_DAL clienteDAL = new Clientes_DAL();

            try
            {
                Clientes cliente = clienteDAL.Cliente_Especifico(CadenaConexion, ID);
                if (cliente != null)
                {
                    txtIdentificacion.Text = cliente.IDENTIFICACION.ToString();
                    txtNombreCompleto.Text = cliente.NOMBRE_COMPLETO;
                    txtTelefono.Text       = cliente.TELEFONO.ToString();
                    txtID.Text             = cliente.ID.ToString();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }