Resaltar palabras de un dataGridView

15/05/2007 - 18:40 por Francisco Zavala Hernandez | Informe spam
Hola amigos.

Quiero hacer lo siguiente pero no se si pueda...
Hice una aplicacion que realiza una busquedas en una base de datos y el
resultado lo despliego en un datagridview y hasta ahi todo bien..
Pero lo que quierero hacer es por ejemplo que si pongo en le buscador
"Impresora HP" (la base de datos es de productos de computo) que esas
palabras salgan resaltadas en el datagridview...

No se si se pueda hacer y si se puede hacer no se como jejejeje

gracias de antemano .

att: Francisco Zavala
 

Leer las respuestas

#1 Luis Miguel Blanco
16/05/2007 - 21:44 | Informe spam
Hola Francisco

No hay de qué, me alegro de que te sirviera 8-D

Respecto a la capacidad de aplicar este efecto que mencionas de forma
selectiva a parte del texto de una celda, también es posible, aunque en este
caso tenemos que "hilar más fino", y el evento CellFormatting se nos queda un
poco corto de alcance 8-)

Para ello lo que necesitamos es recurrir al otro evento: CellPainting, el
cual deja al programador libertad absoluta para pintar como quiera la
totalidad de la celda. Aunque claro, en este caso "tanto poder, conlleva una
gran responsabilidad" 8-) y tenemos que encargarnos de toda la operación de
dibujo de la celda.

Te adjunto un bloque de código en el que utilizando este evento, comprobamos
si estamos situados en una columna y fila adecuada, además de que la columna
sea también la que vamos a manipular. En caso afirmativo, rellenamos el fondo
de la celda con un color, y dibujamos su contorno.

Supongamos que lo que queremos es poner en negrita la primera palabra del
valor a mostrar en la celda. En ese caso, pasamos a sendas variables la
cadena a mostrar resaltada y el resto del valor. Calculamos el tamaño del
texto a resaltar con TextRenderer.MeasureText, y realizamos dos operaciones
de dibujo de texto con TextRenderer.DrawText, una para la palabra en negrita
y otra para el resto. Como puedes observar, también debemos encargarnos de
ubicar el texto en la posición que necesitemos dentro de la celda.

Observa que el final, mediante "e.Handled = true;" le decimos al control que
somos nosotros quienes nos encargamos del dibujo de la celda, ya que de otra
forma, el DataGridView efectuaría sus propias operaciones de dibujo encima de
las nuestras, eliminándolas.

//-
private void dgvGrid_CellPainting(object sender,
DataGridViewCellPaintingEventArgs e)
{
if (e.ColumnIndex > 0 && e.RowIndex >= 0 &&
this.dgvGrid.Columns[e.ColumnIndex].Name == "SpanishProductName")
{
e.Graphics.FillRectangle(new SolidBrush(Color.Lavender), e.CellBounds);
e.Graphics.DrawRectangle(new Pen(Color.DarkMagenta, 1), e.CellBounds);

int nPosicionEspacio = e.Value.ToString().IndexOf(" ");
string sP1 = e.Value.ToString().Substring(0, nPosicionEspacio);
string sP2 = e.Value.ToString().Substring(nPosicionEspacio + 1);

Size szTexto1 = TextRenderer.MeasureText(sP1, new Font(e.CellStyle.Font,
FontStyle.Bold));

TextRenderer.DrawText(e.Graphics,
sP1,
new Font(e.CellStyle.Font, FontStyle.Bold),
new Point(e.CellBounds.X, e.CellBounds.Y + 2),
Color.DarkBlue);

TextRenderer.DrawText(e.Graphics,
sP2,
e.CellStyle.Font,
new Point(e.CellBounds.X + szTexto1.Width, e.CellBounds.Y + 2),
Color.DarkBlue);

e.Handled = true;
}
}
//-

Espero que partiendo de este ejemplo, y con algunos retoques propios,
consigas el efecto que necesitas.

Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Francisco Zavala Hernandez" wrote:

Hol a Luis.

Muchas gracias por la ayuda, me sirve mucho el ejemplo que me has puesto.
Pero no sabes si es posible aplicar un Formato a una celda pero solo
particial mente
ejemplo que la celda contenga "Hola Mundo " y que solo resalte Mundo ya sea
con un tamaño de letra mas grande o otro color ..

:P gracias por la ayuda

saludos!!





"Luis Miguel Blanco" escribió
en el mensaje news:
> Hola Francisco
>
> Puedes utilizar el evento CellFormatting del DataGridView, que se produce
> cada vez que el control necesita dibujar una celda, permitiendo aplicarle
> un
> formato al valor a dibujar. Te adjunto un bloque de ejemplo en el que se
> comprueba a qué columna pertenece el valor a mostrar. Si además se cumple
> una
> condición, se aplica un formato de negrita al valor a dibujar, utilizando
> para ello el estilo correspondiente a la celda.
>
> //--
> private void dgvGrid_CellFormatting(object sender,
> DataGridViewCellFormattingEventArgs e)
> {
> if (this.dgvGrid.Columns[e.ColumnIndex].Name == "ListPrice")
> {
> // y se cumple esta condición
> if ((decimal)e.Value > 1000)
> {
> e.CellStyle.Font = new Font("Comic Sans MS", 12, FontStyle.Bold);
> }
> }
> }
> //--
>
> Espero que te sirva de ayuda
>
> Un saludo
> Luis Miguel Blanco
> http://www.dotnetmania.com
>
>
> "Francisco Zavala Hernandez" wrote:
>
>> Hola amigos.
>>
>> Quiero hacer lo siguiente pero no se si pueda...
>> Hice una aplicacion que realiza una busquedas en una base de datos y el
>> resultado lo despliego en un datagridview y hasta ahi todo bien..
>> Pero lo que quierero hacer es por ejemplo que si pongo en le buscador
>> "Impresora HP" (la base de datos es de productos de computo) que esas
>> palabras salgan resaltadas en el datagridview...
>>
>> No se si se pueda hacer y si se puede hacer no se como jejejeje
>>
>> gracias de antemano .
>>
>> att: Francisco Zavala
>>
>>
>>
>>
>>
>>



Preguntas similares