none
Duda con acciones de DataGridView en el Load del Form RRS feed

  • Pregunta

  • Hola.

      Tengo un control de tipo datagridview cargado en el diseño de un form, dicho form lo ejecuto como hijo de un form padre mdi, bien en el load del form hijo tengo cierto código para que pinte cada celda del datagridview de cierto color, el código que uso es el siguiente:

            private void MiFormHijo_Load(object sender, EventArgs e)
            {
                try
                {
                    //antes de esto tengo un metodo para llenar midtgv.
                    //que ejecuta perfectamente ya que si me muuestra lo que deseo.
                    for (int i = 0; i < midtgv.RowCount; i++)
                    {
                        midtgv.FirstDisplayedCell.Selected = false;
                        midtgv.Rows[i].DefaultCellStyle.BackColor = Color.Red;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

      Bueno ahora mi problema es que al mandar a llamar al form no me muestra las celdas pintadas, ni me quita la celeccion de la primera celda, ejecutando sobre un punto de interrupcion si entra al ciclo, de igual manera si ejecuto el formulario fuera del form padre (ejecuto como form principal a form hijo), si me muestra los datos y celdas pintadas, esto con el mismo codigo que mostre anteriormente.

       PREGUNTAS: ¿por que ejecutando el form dentro de un form mdi no me pinta las celdas, si al hacerlo fuera de el si lo hace?, ¿como puedo resolver este problema?.

      Espero y me puedan orientar

    lunes, 16 de junio de 2014 17:10

Todas las respuestas

  • hola

    entiendo que midtgv es el nombre que le pusiste al datagridview que esta dentro del mismo MiFormHijo, no ?

    a donde apunto es que accedes a el control que eta en el mismo form, o esta en otro?

    lo que tampoco entendi es en que evento estas cargando las Rows del grid, en que evento asignas el DataSource?

    ----

    no uses

    for (int i = 0; i < midtgv.RowCount; i++)               

    usa

    foreach(DataGridView row in midtgv.Rows){

    }

    saludo


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 16 de junio de 2014 17:41
  • Saludos Leandro.

      Efectivamente midtgv es como nombre al control DataGridView, y cual dicho control si se encuentra dentro del mismo Form.

      Para hacer respectivamente la carga de los rows del control lo haga de la sig manera:

            public void poblardatagridview(DataGridView datos, SqlCommand consultasql)
            {
                SqlDataAdapter adaptador;
                datos.DataMember = null;
                ds = null;
                ds = new DataSet();
                adaptador.SelectCommand = consultasql;
                while (datos.Rows.Count > 1)
                {
                    datos.Rows.RemoveAt(0);
                }
                adaptador.Fill(ds);
                datos.DataSource = ds;
                datos.DataMember = ds.Tables[0].ToString();
                conexion.Close();
            }

      El cual lo llamo antes del siclo mostrandome correctame los registros que requiero.

    ----

      Usando el foreach, sigue sin pintar los row, lo hice de la sig forma:

                    foreach (DataGridViewRow row in midtgv.Rows)
                    {
                        row.Cells[0].Selected = false;
                        row.DefaultCellStyle.BackColor = Color.Red;
                    }

    lunes, 16 de junio de 2014 18:34
  • o sea estas ejecutando en este orden


    poblardatagridview(midtgv, "query sql");

    foreach (DataGridViewRow row in midtgv.Rows) { row.Cells[0].Selected = false; row.DefaultCellStyle.BackColor = Color.Red; }

    o sea primero cargas los items y luesto asignas el color

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 16 de junio de 2014 19:42
  • Así es Leandro en ese orden lo estoy ejecutando dentro del Load del Form
    lunes, 16 de junio de 2014 20:01
  • en realidad lo planteo porque en el codigo que pusiste al principio no veo que invoques en el Load del form al metodo poblardatagridview()

    si no lo invocas entonces no habra rows que aplicar color

    podrias poner un breakpoint en el codigo y ver si ingresa en el foreach para recorrer cada row

    es mas si evaluas el Rows.Count hay algun item ? cuando aplicas el color, o las rows aparecen despues

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 17 de junio de 2014 1:15
  • En efecto colocando el breakpoint si ingresa a ejecutar lo que hay dentro del foreach.

    Igual como mencione en la pregunta, si lo ejecuto el form fuera del form mdi si me aparecen los rows pintados, la cuestión viene cuando llamo al form desde el mdi pues es ahi cuando no los pinta.


    • Editado L - J - R martes, 17 de junio de 2014 18:17
    martes, 17 de junio de 2014 18:16
  • la cuestión viene cuando llamo al form desde el mdi pues es ahi cuando no los pinta.

    la verdad esta muy raro, hasta donde se que el form este dentro de MDI no deberia afectar

    como incluyes ese form como parte del MDI, asignas la propiedad MdiParent ?

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 17 de junio de 2014 19:11
  • lo mando a traer a través de un toolStripButton a través de su evento click, y lo hago de la sig. forma:

    MiFormHijo miObjFrm = new MiFormHijo();
    miObjFrm.MdiParent = this;
    miObjFrm.Show();


    martes, 17 de junio de 2014 21:40