none
Al hacer click en el DataGridView sale del formulario RRS feed

  • Pregunta

  • Tengo formulario1 que llama a formulario2

    En formulario2 tengo un DataGridView y se carga el contenido, pero cuando hago click sobre el datagridView sale del formulario

    la configuración del formulario2 es

    using BT.Entidades;
    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Windows.Forms;
    
    namespace BT
    {
        public partial class FormServiciosDeClientesPorTrabajadores : Form
        {
            private string elNuevo = "";
    
            public string ElNuevo { get { return elNuevo; } }
    
            private string miConexion = "";
    
            private bool cargando;
    
            private AtencionDeServiciosDeClientesPorTrabajadores miAtencionDeServiciosDeClientesPorTrabajadores = null;
    
            public AtencionDeServiciosDeClientesPorTrabajadores MiAtencionDeServiciosDeClientesPorTrabajadores {
                get { return miAtencionDeServiciosDeClientesPorTrabajadores; } }
    
            List<PersonalConfiguracionServicio> listadoPersonalConfiguracionServicio = new List<PersonalConfiguracionServicio>();
    
    
            public FormServiciosDeClientesPorTrabajadores()
            {
                try
                {
                    InitializeComponent();
                    bindingSource1.DataSource = listadoPersonalConfiguracionServicio;
                    dataGridView1.DataSource = bindingSource1;
                    FormatoDataGridView();
                    miConexion = ConfigurationManager.AppSettings["miConexion"];
                }
                catch (Exception ex)
                {
    
                }
            }
    
            private void ServiciosDeClientesPorTrabajadores_Load(object sender, EventArgs e)
            {
                try
                {
                    //miAtencionDeServiciosDeClientesPorTrabajadores = new AtencionDeServiciosDeClientesPorTrabajadores();
                    //CargarDesplegableEmpresa();
                    //this.CargarDesplegablePersonalContacto();
                    //FormPuestosConfiguracion_del_servicio pp = new FormPuestosConfiguracion_del_servicio();
                    //pp.ShowDialog();
                    //listadoPersonalConfiguracionServicio.AddRange(pp.ListadoPersonalConfiguracionServicio);
                    //this.bindingSource1.DataSource = listadoPersonalConfiguracionServicio;
                    //this.dataGridView2.DataSource = null;
                    //this.dataGridView2.DataSource = bindingSource1;
    
                    //List<String> listado = new List<string> { { "1" }, { "2" }, { "3" }, { "4" } };
                    //dataGridView1.DataSource = listado;
    
    
                    PersonalConfiguracionServicio pppp = new PersonalConfiguracionServicio();
                    pppp.alta = true;
                    pppp.cancelacion = false;
                    pppp.FechaInicio__PersonalConfiguracionServicio = DateTime.Now;
                    pppp.FechaFin_PersonalConfiguracionServicio = DateTime.Now;
                    pppp.Id_CategoriaPuesto_PersonalConfiguracionServicio = 1;
                    pppp.Id_PersonalConfiguracionServicio = 1;
                    pppp.Id_Trabajador_PersonalConfiguracionServicio = 1;
                    pppp.Nombre_CategoriaPuesto_PersonalConfiguracionServicio = "Noo";
                    pppp.Nombre_Trabajador_PersonalConfiguracionServicio = "Juas";
                    listadoPersonalConfiguracionServicio.Add(pppp);
                    this.bindingSource1.DataSource = listadoPersonalConfiguracionServicio;
                    this.dataGridView1.DataSource = null;
                    this.dataGridView1.DataSource = bindingSource1;
    
                }
                catch (Exception ex)
                {
    
                }
            }
    
            private void CargarDesplegableEmpresa()
            {
                try
                {
                    cargando = true;
                    List<Empresa> listadoClientes = new Empresa().ObtenerTodos();
                    //Lo ordenamos para así poder encontrarlo de forma rápida
                    listadoClientes = listadoClientes.OrderBy(X => X.NombreCompleto_Empresa).ToList();
                    //En la primera posición insertaremos agregar nuevo
                    Empresa nuevo = (Empresa)AyudaGeneral.PorDefecto(new Empresa());
                    listadoClientes.Insert(0, nuevo);
                    //Vinculamos el objeto
                    this.comboBoxCliente.DataSource = listadoClientes;
                    this.comboBoxCliente.DisplayMember = "NombreCompleto_Empresa";
                    this.comboBoxCliente.ValueMember = "Id_Empresa";
                    cargando = false;
                }
                catch (Exception ex)
                {
    
                }
            }
    
            private void ComboBoxCliente_SelectedIndexChanged(object sender, EventArgs e)
            {
                try
                {
                    if (this.comboBoxCliente.Items.Count > 0 && cargando == false)
                    {
                        Empresa emp = (Empresa)this.comboBoxCliente.SelectedItem;
                        if (emp.Id_Empresa == -1)
                        {
                            FormNuevo n = new FormNuevo("Empresa", "Escribe el nombre de la empresa \"Cliente\"");
                            AddOwnedForm(n);
                            n.ShowDialog();
                            /**
                             Deberia hacerse leyendo desde la propiedad elNuevo y no desde el control textBoxNuevo.Text;
                             */
                            if (n.DialogResult == DialogResult.OK)
                            {
    
                                //string nombreEmpresa = n.textBoxNuevo.Text;
                                string nombreEmpresa = n.ElNuevo;
                                Empresa empe = new Empresa();
                                empe.NombreCompleto_Empresa = nombreEmpresa;
                                Empresa empresaDevuelta = Empresa.Insertar(empe);
                                miAtencionDeServiciosDeClientesPorTrabajadores.NombreCompleto_Empresa_AtencionDeServiciosDeClientesPorTrabajadores = nombreEmpresa;
                                CargarDesplegableEmpresa();
                                this.comboBoxCliente.SelectedValue = empresaDevuelta.Id_Empresa;
                            }
                            n.Close();
                            n.Dispose();
                        }
                        else
                        {
                            miAtencionDeServiciosDeClientesPorTrabajadores.NombreCompleto_Empresa_AtencionDeServiciosDeClientesPorTrabajadores = emp.NombreCompleto_Empresa;
                            CargarDesplegablePersonalContacto();
                        }
                    }
                }
                catch (Exception ex)
                {
    
                }
            }
    
            private void FormatoDataGridView()
            {
                try
                {
                    //Columnas Visibles
                    dataGridView1.Columns["Id_PersonalConfiguracionServicio"].Visible = false;
                    dataGridView1.Columns["Id_Trabajador_PersonalConfiguracionServicio"].Visible = false;
                    dataGridView1.Columns["Id_CategoriaPuesto_PersonalConfiguracionServicio"].Visible = false;
                    //Columnas ordernas posición de columnas
                    dataGridView1.Columns["Nombre_Trabajador_PersonalConfiguracionServicio"].DisplayIndex = 1;
                    dataGridView1.Columns["Nombre_CategoriaPuesto_PersonalConfiguracionServicio"].DisplayIndex = 2;
                    dataGridView1.Columns["FechaInicio__PersonalConfiguracionServicio"].DisplayIndex = 3;
                    dataGridView1.Columns["FechaFin_PersonalConfiguracionServicio"].DisplayIndex = 4;
                    dataGridView1.Columns["alta"].DisplayIndex = 5;
                    dataGridView1.Columns["fechaAlta_PersonalConfiguracionServicio"].DisplayIndex = 6;
                    dataGridView1.Columns["cancelacion"].DisplayIndex = 7;
                    dataGridView1.Columns["fechaCancelacion_PersonalConfiguracionServicio"].DisplayIndex = 8;
    
                    dataGridView1.Columns["Nombre_Trabajador_PersonalConfiguracionServicio"].HeaderText = "Nombre del Trabajador";
                    dataGridView1.Columns["Nombre_CategoriaPuesto_PersonalConfiguracionServicio"].HeaderText = "Categoría";
                    dataGridView1.Columns["FechaInicio__PersonalConfiguracionServicio"].HeaderText = "Fecha Inicio";
                    dataGridView1.Columns["FechaFin_PersonalConfiguracionServicio"].HeaderText = "Fecha Fin";
                    dataGridView1.Columns["alta"].HeaderText = "Alta";
                    dataGridView1.Columns["fechaAlta_PersonalConfiguracionServicio"].HeaderText = "Fecha Alta";
                    dataGridView1.Columns["cancelacion"].HeaderText = "Cancelación";
                    dataGridView1.Columns["fechaCancelacion_PersonalConfiguracionServicio"].HeaderText = "Fecha Cancelación";
                }
                catch (Exception ex)
                {
    
                }
            }
    
            private void ButtonAñadirPedido_Click(object sender, EventArgs e)
            {
                try
                {
                    FormPersonalConfiguracionServicio miFormulario = new FormPersonalConfiguracionServicio(this.dateTimePickerFechaInicio.Value, this.dateTimePickerFechaFin.Value);
                    miFormulario.ShowDialog();
                    if (miFormulario.DialogResult == DialogResult.OK)
                    {
                        listadoPersonalConfiguracionServicio.Add(miFormulario.MiPersonalConfiguracionServicio);
                        //bindingSource1.DataSource = null;
                        bindingSource1.DataSource = listadoPersonalConfiguracionServicio;
                        dataGridView1.DataSource = null;
                        dataGridView1.DataSource = bindingSource1;
                        FormatoDataGridView();
                    }
                }
                catch (Exception ex)
                {
    
                }
            }
    
            private void ComboBoxPersonalContactoCliente_SelectedIndexChanged(object sender, EventArgs e)
            {
                try
                {
                    if (this.comboBoxPersonalContactoCliente.Items.Count > 0 && cargando == false)
                    {
                        PersonalContacto emp = (PersonalContacto)this.comboBoxPersonalContactoCliente.SelectedItem;
                        if (emp.Id_PersonalContacto == -1)
                        {
                            FormNuevo n = new FormNuevo("Personal de Contacto", "Escribe el nombre de persona de contacto con el \"Cliente\"");
                            AddOwnedForm(n);
                            List<Empresa> nuevaLista = ((List<Empresa>)this.comboBoxCliente.DataSource);
                            nuevaLista = (from dato in nuevaLista
                                          where dato.Id_Empresa != -1
                                          select dato).ToList();
                            //Como he creado una nueva lista y le he quitado el insertar nuevo debo reducir el indice
                            int posicionPorValue = Convert.ToInt32(this.comboBoxCliente.SelectedValue);
                            n.CargarComboBox<Empresa>(nuevaLista, this.comboBoxCliente.DisplayMember, this.comboBoxCliente.ValueMember, posicionPorValue);
                            n.ShowDialog();
                            /**
                             Deberia hacerse leyendo desde la propiedad elNuevo y no desde el control textBoxNuevo.Text;
                             */
                            if (n.DialogResult == DialogResult.OK)
                            {
                                string nombreEmpresa = n.textBoxNuevo.Text;
                                PersonalContacto pc = new PersonalContacto();
                                pc.Nombre_PersonalContacto = nombreEmpresa;
                                pc.id_Empresa_PersonalContacto = Convert.ToInt32(n.comboBox1.SelectedValue);
                                PersonalContacto personalContactoDevuelto = PersonalContacto.Insertar(pc);
                                //miAtencionDeServiciosDeClientesPorTrabajadores.PersonalContacto = nombreEmpresa;
                                CargarDesplegablePersonalContacto();
                                this.comboBoxPersonalContactoCliente.SelectedValue = personalContactoDevuelto.Id_PersonalContacto;
                            }
                            n.Close();
                            n.Dispose();
                        }
                        else
                        {
                            //miAtencionDeServiciosDeClientesPorTrabajadores.PersonalContacto = emp.Nombre_PersonalContacto;
                        }
                    }
                }
                catch (Exception ex)
                {
    
                }
            }
    
            private void CargarDesplegableCategoriaPuesto()
            {
                try
                {
                    cargando = true;
                    List<CategoriaPuesto> miLista = new CategoriaPuesto().ObtenerTodos();
                    //Lo ordenamos para así poder encontrarlo de forma rápida
                    miLista = miLista.OrderBy(X => X.Nombre_CategoriaPuesto).ToList();
                    //En la primera posición insertaremos agregar nuevo
                    CategoriaPuesto nuevo = (CategoriaPuesto)AyudaGeneral.PorDefecto(new CategoriaPuesto());
                    miLista.Insert(0, nuevo);
                    //Vinculamos el objeto
                    this.comboBoxCliente.DataSource = miLista;
                    this.comboBoxCliente.DisplayMember = "Nombre_CategoriaPuesto";
                    this.comboBoxCliente.ValueMember = "Id_CategoriaPuesto";
                    cargando = false;
                }
                catch (Exception ex)
                {
    
                }
            }
    
            private void CargarDesplegablePersonalContacto()
            {
                try
                {
                    cargando = true;
                    if ((Convert.ToInt32(this.comboBoxCliente.SelectedValue)) != -1)
                    {
                        List<PersonalContacto> miLista = new PersonalContacto().ObtenerTodos();
                        //Filtramos las lista para que solo se muestre el personal que pertecene al Cliente
                        //Lo ordenamos para así poder encontrarlo de forma rápida
                        miLista = miLista.Where(x => x.id_Empresa_PersonalContacto == Convert.ToInt32(this.comboBoxCliente.SelectedValue)).OrderBy(X => X.Nombre_PersonalContacto).ToList();
                        //En la primera posición insertaremos agregar nuevo
                        PersonalContacto nuevo = (PersonalContacto)AyudaGeneral.PorDefecto(new PersonalContacto());
                        miLista.Insert(0, nuevo);
                        //Vinculamos el objeto
                        this.comboBoxPersonalContactoCliente.DataSource = miLista;
                        this.comboBoxPersonalContactoCliente.DisplayMember = "Nombre_PersonalContacto";
                        this.comboBoxPersonalContactoCliente.ValueMember = "Id_PersonalContacto";
                    }
                    else
                    {
                        this.comboBoxPersonalContactoCliente.DataSource = null;
                        this.comboBoxPersonalContactoCliente.DisplayMember = "";
                        this.comboBoxPersonalContactoCliente.ValueMember = "";
                    }
                    cargando = false;
                }
                catch (Exception ex)
                {
    
                }
            }
    
            private void ButtonOk_Click(object sender, EventArgs e)
            {
                try
                {
                    this.DialogResult = DialogResult.OK;
                    this.Hide();
                }
                catch (Exception ex)
                {
    
                }
            }
    
            private void ButtonCancelar_Click(object sender, EventArgs e)
            {
                try
                {
                    this.DialogResult = DialogResult.Cancel;
                    this.Close();
                }
                catch (Exception ex)
                {
    
                }
            }
    
            private void Button1_Click(object sender, EventArgs e)
            {
                try
                {
                    FormPuestosConfiguracion_del_servicio miFormulario = new FormPuestosConfiguracion_del_servicio(this.dateTimePickerFechaInicio.Value, this.dateTimePickerFechaFin.Value);
                    miFormulario.ShowDialog();
                    if (miFormulario.DialogResult == DialogResult.OK)
                    {
                        listadoPersonalConfiguracionServicio.AddRange(miFormulario.ListadoPersonalConfiguracionServicio);
                        int minimo = listadoPersonalConfiguracionServicio.Min(x => x.Id_PersonalConfiguracionServicio);
                        foreach (var item in listadoPersonalConfiguracionServicio.Where(x => x.Id_PersonalConfiguracionServicio == 0))
                        {
                            minimo--;
                            item.Id_PersonalConfiguracionServicio = minimo;
                        }
                        //bindingSource1.DataSource = null;
                        bindingSource1.DataSource = listadoPersonalConfiguracionServicio;
                        dataGridView1.DataSource = null;
                        dataGridView1.DataSource = bindingSource1;
                        if (listadoPersonalConfiguracionServicio.Count > 0)
                        {
                            //dataGridView1.se
                        }
                        FormatoDataGridView();
                    }
                }
                catch (Exception ex)
                {
    
                }
            }
    
            private void DataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                try
                {
    
                }
                catch (Exception ex)
                {
    
                }
            }
    
            private void DataGridView1_SelectionChanged(object sender, EventArgs e)
            {
                try
                {
                    if (dataGridView1.CurrentRow == null)
                    {
                        return;
                    }
                    var rowsCount = dataGridView1.SelectedRows.Count;
                    if (rowsCount == 0 || rowsCount > 1) return;
    
                    //var row = dataGridView1.SelectedRows[0];
                    var row = dataGridView1.CurrentRow;
                    if (row == null) return;
                    int jjjj = 0;
                }
                catch (Exception ex)
                {
    
                }
            }
    
            private void DataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
                try
                {
    
                }
                catch (Exception ex)
                {
    
                }
            }
        }
    }
    

    jueves, 19 de septiembre de 2019 23:10

Respuestas

  • cuando hago click sobre el datagridView sale del formulario

    No se ve a simple vista nada "obvio" en el código que pueda dar lugar a este comportamiento. Puede haber alguna causa oculta. Por ejemplo, ¿quá pasaría si el manejador ButtonCancelar_Click estuviera enlazado con alguno de los eventos del DataGridView? Se cerrariá el formulario al ocurrir ese evento en el DataGridView. No digo que te esté pasando precisamente esto, lo pongo como ejemplo de algo que si sucediese no podríamos verlo en el código que has aportado.

    Para averiguar la causa de estos problemas, se utiliza el debugger. Dado que el problema es que se cierra inesperadamente el formulario, agrega un manejador para el evento Closing y pon dentro un punto de ruptura. Cuando se pare ahí la ejecución, examina la ventanita donde el debugger te muestra la traza de pila, y eso te indicará los pasos que ocurrieron hasta llegar a ese punto. De esa manera puedes ver qué es lo que desencadenó el cierre del formulario.

    Añado una observación sobre tu código: Es una pésima costumbre, y te ocasionará muchos problemas en el futuro, la de dejar vacíos los bloques "catch". No lo hagas NUNCA (o por lo menos casi nunca -- en rarísimas ocasiones puede estar justificado, pero en esos casos hay que meter un gran bloque de comentarios dentro del bloque catch vacío exponiendo con todo detalle cuál es el razonamiento que conduce a justificar que se encuentre vacío). Si no quieres mostrar un mensaje que le muestre la excepción al usuario, entonces como mínimo debe existir en el bloque una sentencia de "logueo" que salve en algún sitio la excepción, para que luego puedas depurar el programa. De lo contrario, se ignoran silenciosamente los errores y tu programa puede tener un comportamiento errático sin que en ningún momento te enteres de qué es lo que está pasando. Por cierto, no es necesario que metas el try...catch en todos los eventos uno por uno. Puedes de forma genérica caturar al principio el Application.UnhandledEvent, y eso intercepta todos los errores inesperados en todos los puntos de tu programa.

    viernes, 20 de septiembre de 2019 8:21
    Moderador
  • Si fuera obvio no preguntaría.

    Lo de los catch vacios es porque me dio ese error, y entonces lo que hice fué a todos los métodos que tenía en ese formulario y constructores les puse el try y el catch y cuando empezaba el catch les puse un break point y en ninguno se para.

    Ya configuraré más adelante los catch, pero lo q me interesa antes. Es descubrir ese fallo.

    Ahora pruebo a ver lo del evento closing, pero no le encuentro el sentido de que si todas las instrucciones están dentro de un try y un catch falle de ese modo.

    viernes, 20 de septiembre de 2019 14:26

Todas las respuestas

  • cuando hago click sobre el datagridView sale del formulario

    No se ve a simple vista nada "obvio" en el código que pueda dar lugar a este comportamiento. Puede haber alguna causa oculta. Por ejemplo, ¿quá pasaría si el manejador ButtonCancelar_Click estuviera enlazado con alguno de los eventos del DataGridView? Se cerrariá el formulario al ocurrir ese evento en el DataGridView. No digo que te esté pasando precisamente esto, lo pongo como ejemplo de algo que si sucediese no podríamos verlo en el código que has aportado.

    Para averiguar la causa de estos problemas, se utiliza el debugger. Dado que el problema es que se cierra inesperadamente el formulario, agrega un manejador para el evento Closing y pon dentro un punto de ruptura. Cuando se pare ahí la ejecución, examina la ventanita donde el debugger te muestra la traza de pila, y eso te indicará los pasos que ocurrieron hasta llegar a ese punto. De esa manera puedes ver qué es lo que desencadenó el cierre del formulario.

    Añado una observación sobre tu código: Es una pésima costumbre, y te ocasionará muchos problemas en el futuro, la de dejar vacíos los bloques "catch". No lo hagas NUNCA (o por lo menos casi nunca -- en rarísimas ocasiones puede estar justificado, pero en esos casos hay que meter un gran bloque de comentarios dentro del bloque catch vacío exponiendo con todo detalle cuál es el razonamiento que conduce a justificar que se encuentre vacío). Si no quieres mostrar un mensaje que le muestre la excepción al usuario, entonces como mínimo debe existir en el bloque una sentencia de "logueo" que salve en algún sitio la excepción, para que luego puedas depurar el programa. De lo contrario, se ignoran silenciosamente los errores y tu programa puede tener un comportamiento errático sin que en ningún momento te enteres de qué es lo que está pasando. Por cierto, no es necesario que metas el try...catch en todos los eventos uno por uno. Puedes de forma genérica caturar al principio el Application.UnhandledEvent, y eso intercepta todos los errores inesperados en todos los puntos de tu programa.

    viernes, 20 de septiembre de 2019 8:21
    Moderador
  • Si fuera obvio no preguntaría.

    Lo de los catch vacios es porque me dio ese error, y entonces lo que hice fué a todos los métodos que tenía en ese formulario y constructores les puse el try y el catch y cuando empezaba el catch les puse un break point y en ninguno se para.

    Ya configuraré más adelante los catch, pero lo q me interesa antes. Es descubrir ese fallo.

    Ahora pruebo a ver lo del evento closing, pero no le encuentro el sentido de que si todas las instrucciones están dentro de un try y un catch falle de ese modo.

    viernes, 20 de septiembre de 2019 14:26