none
Cambiar BackColor en un DataGridViewButtonCell RRS feed

  • Pregunta

  • Saludos!

    ¿Alguíen puede mostrarme una forma de cambiar el color de fondo de un boton (DataGridViewButoonCell)?. Mi aplicación consiste en dar un clic al botón, seleccionar un color de un ColorDialog y al aceptar deseo se pinte el color de fondo con el color seleccionado:

    Ejem:

    Al leer dato tengo:

    DataGridViewButtonCell btnCell = new DataGridViewButtonCell();
                       
    btnCell.Style.BackColor =Color.Blue;

    Al guardar dato tengo:

    tablaPropiedades.CurrentRow.Cells[e.ColumnIndex].Style.BackColor = dialogColor.Color; //donde dialogColor es ColorDialog

     

    La ayuda MSDN me dice: "

    Cuando los estilos visuales están habilitados, los botones de una columna de botones se pintan usando ButtonRenderer y los estilos de celda especificados mediante propiedades como DefaultCellStyle no tienen ningún efecto.

    "

    ¿Alguien sabe como habilitar el backcolor en un DataGridViewButtonCell?

    lunes, 28 de noviembre de 2011 22:50

Respuestas

  • Saludos!

    Practicamente es una tabla de 2x2, las columnas son de tipo DataGridViewTextBox, mediante codigo creo solo una celda de tipo DataGridViewButtonCell ya que requiero de un boton y no puedo hacerlo mediante el diseñador, de otra forma no podria ya que el resto son de tipo TextBox.

    Ejem:

      DataGridViewButtonCell btnCell = new DataGridViewButtonCell();
                        btnCell.FlatStyle = FlatStyle.Flat;
                         DataGridViewTextBoxCell txtCell = new DataGridViewTextBoxCell();
                        DataGridViewRow fila = new DataGridViewRow();
                        fila.Cells.Add(txtCell);
                        fila.Cells.Add(btnCell);
                        tablaPropiedades.Rows.Add(fila);

    Al ejecutarlo aparece correctamente el boton, pero al agregar el color mediante el evento click:

    tablaPropiedades.CurrentRow.Cells[e.ColumnIndex].Style.SelectionBackColor = dialogColor.Color;

    No se aplica el color a menos que se pierda el aspecto (btnCell.FlatStyle=FlatStyle.Flat). Es como si en el fondo la celda siguiera siendo de tipo TextBox y no del tipo boton..

     

    Gracias!

    • Marcado como respuesta ivanny20 martes, 29 de noviembre de 2011 17:50
    martes, 29 de noviembre de 2011 0:04

Todas las respuestas

  • es que si ahces esto

    DataGridViewButtonCell btnCell = new DataGridViewButtonCell();

    no funciona porque estas creando una instancia nueva, no tomas una del grid existente

    esto

    tablaPropiedades.CurrentRow.Cells[e.ColumnIndex].Style.BackColor = dialogColor.Color;

    si deberia funcionar

    pero lo anterior que habias puesto no

    deebs seleccionar la celda basandote en el datagridview que tienes en el form, si creas una nueva instancia no funciona

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 28 de noviembre de 2011 23:02
  • Saludos.

    Ciertamente Leandro estoy creando una nueva instancia, ya que la fila la agrego desde codigo, la unica forma de aceptar el color como indicas es aplicando la propiedad

    datagridview.FlatStyle=FlatStyle.Flat;

    Pero ello ocasiona que se pierda el relieve del boton. Adicional a ello la columna es de tipo TexBoxColumn, tengo 2 Row, la celda 2 es la que utilizo como botón. Mi idea es conservar el aspecto del botón tomando como fondo el color que le doy.

     

    Gracias!

    lunes, 28 de noviembre de 2011 23:40
  • ya que la fila la agrego desde codigo

    pero si al fila la creas desde codigo, esto no implica que crees cada celda

    la celda la define las columnas definidas en el grid, tu no creas objetos celda,sino que agregas una row con datos, lo que creas son datos y luego selecionas la celda que se crea para aplciar estilo

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 28 de noviembre de 2011 23:43
  • Saludos!

    Practicamente es una tabla de 2x2, las columnas son de tipo DataGridViewTextBox, mediante codigo creo solo una celda de tipo DataGridViewButtonCell ya que requiero de un boton y no puedo hacerlo mediante el diseñador, de otra forma no podria ya que el resto son de tipo TextBox.

    Ejem:

      DataGridViewButtonCell btnCell = new DataGridViewButtonCell();
                        btnCell.FlatStyle = FlatStyle.Flat;
                         DataGridViewTextBoxCell txtCell = new DataGridViewTextBoxCell();
                        DataGridViewRow fila = new DataGridViewRow();
                        fila.Cells.Add(txtCell);
                        fila.Cells.Add(btnCell);
                        tablaPropiedades.Rows.Add(fila);

    Al ejecutarlo aparece correctamente el boton, pero al agregar el color mediante el evento click:

    tablaPropiedades.CurrentRow.Cells[e.ColumnIndex].Style.SelectionBackColor = dialogColor.Color;

    No se aplica el color a menos que se pierda el aspecto (btnCell.FlatStyle=FlatStyle.Flat). Es como si en el fondo la celda siguiera siendo de tipo TextBox y no del tipo boton..

     

    Gracias!

    • Marcado como respuesta ivanny20 martes, 29 de noviembre de 2011 17:50
    martes, 29 de noviembre de 2011 0:04