Ir al contenido principal

DataGridViewTextEditorColumn (I Parte)

Como lo dice el titulo, una clase DataGridViewTextEditorColumn... Al principio, cuando cree el control "TextEditor", la idea era luego crear una columna para el control "DataGridView" que utilice mi control como editor de la celda para poder agregarle botones, como también poder usarlo en celdas donde solo se deban digitar números.

Este articulo lo dividiremos en varios articulos para poder explicarlo mejor e intentare explicar mejor cada clase.

Por cuestiones de tiempo no lo había hecho, también por cuestiones de pereza, si!!!.. pereza, jejejeje.... solo de pensar el código que tenia que escribir me daba pereza iniciar. Pero!!!... recientemente donde trabajo hice un formulario para capturar la producción de los empleados, pero el usuario me sugirió que le seria mas fácil si el botón para buscar y eliminar los empleados de la captura apareciera en la misma celda. Ademas en varios desarrollos propios debía implementar este tipo de columna que hasta hoy lo habia resuelto de una manera diferente, para tal fin tenia que personalizar el "DataGridView", así que pense en hacer algo que no tubiera que cambiar nada en este control, que fuera independiente del "DataGridview".

Anteriormente desarrolle un sistema para gimnasios y utilize el DevExpress, valga la publicidad gratuita, excelentes controles (son mi inspiración)... ellos tienen un control llamado GridView y me  fije que las columnas de este control tiene una propiedad para seleccionar el editor de la celda de entre los controles de ellos, así que me parecio buena la idea.

Aun que mi clase no implementara toda la logica, me ayudara a poder interacturar de una mejor manera con el editor de la celda.

Así que entremos en materia, para lograr nuestro objetivo utilizaremos las clases: DataGridViewColumn, DataGridViewTextBoxCell y la interfaz IDataGridViewEditingControl y crearemos un componente que llamare RepositoryTextEditor para asociarlo a la clase DataGridViewTextEditorColumn y poder indicar el tipo de entrada que usara el editor de la celda, las cuales seran las mismas que podemos definir en el TextEditor: None (default), Currency, Numeric, Integer, Time, Percent, como tambien si la columna usara botones y el evento ButtonClick para no hacer esto por código. este ultimo componente aparecera en el ComponentTray del diseñador para tener acceso rapido y facil a el.

(Pantalla en modo de diseño)



Para este demo he utilizado el control nativo "DataGridView" ya que este es el objetivo, tal como se muestra en la imagen, he creado tres columnas tipo DataGridViewTextEditorColumn, una para el código la cual contendra 2 botones, otra para la cantidad cuyo MaskType sera "Numeric" y otra para el precio cuyo MaskType sera "Currency" estas dos ultimas columnas solo aceptaran numeros.

veamos las clases:

 
[ToolboxBitmap(typeof(System.Windows.Forms.TextBox))]
public class DataGridViewTextEditorColumn : DataGridViewColumn
{
}
public class DataGridViewTextEditorCell : DataGridViewTextBoxCell
{
}
class DataGridViewTextEditorControl : TextEditor.TextEditor, IDataGridViewEditingControl
{
}

// Componente para configurar el editor de la celda.
[ToolboxBitmap(typeof(System.Windows.Forms.TextBox))]
[DesignerSerializer(typeof(RepositoryButtonSerializer), typeof(CodeDomSerializer))]
public class RepositoryTextEditor : Component
{
}
 

estas 4 clases son las clases principales, las demás que no mencionare son de implementacion interna y ya las hemos vistos en articulos anteriores, no en detalle pero si para que las usamos.

DataGridViewTextEditorColumn (II Parte)


Comentarios

Entradas populares de este blog

NetBarControl

Actualización. NetBarControl - Description Item Style ( New ) NetBarControl ( Outlook Bar ) es uno de los controles que muchas veces buscamos para usar en nuestras aplicaciones, pero siempre encontramos en internet versiones pagables y tal vez no contamos con el presupuesto esperado como para comprar uno y las versiones gratis que se logran encontrar, pues como son gratis no implementan en su totalidad la funcionalidad que esperamos encontrar en un control de este tipo. Antes de comenzar a escribir este control dedique tiempo en buscar uno por internet que tuviera toda la funcionalidad o por lo menos una interfaz disponible en modo de diseño, pero, no logre encontrar uno, así que me propuse crearlo como a mí me gustaría que funcionara uno gratis y al final llegue a la conclusión de ¿Porque no hay uno completo, gratis y que incluya el código fuente? y la respuesta es: No es fácil , pero tampoco es cosa de otro mundo. Con esto no digo que otro programador no lo pueda hacer ...

TextBox con Icon/Imagen

Bien, continuando con este articulo: TextBox con borde personalizado , ahora le dare la funcionalidad de poder mostrar un icono o imagen dentro del Control TextBox. Existen dos maneras de hacer esto: Pintar el icono/imagen dentro del control o Pintar el icono/imagen dentro del Non-Client Area del control. Pintar el icono/imagen dentro del control. Antes de escribir el código decidi googlear un poco, para ver si alguien más ya habia tenido la misma idea de usar el mensaje EM_SETMARGINS para dejar el espacio necesario para pintar el icono o imagen ya sea a la derecha o izquierda y me he encontrado con este articulo. Adding an Icon or Control to a TextBox or ComboBox . Pintar el icono/imagen de ntro del Non-Client Area del control. Us ando el Non- Client Area no encontre resultados googleando, así que es la forma que usar e para dib ujar un icono o imagen dentro de un control TextBox. En el control TextEditor que escrib í, utilizo esta manera para pintar el icono...

TextBox con Borde Personalizado

Bien, retomando nuevamente mi blog, luego de tanto tiempo ausente, veremos como personalizar el borde del control TextBox con un color diferente. hace poco vi en los foros de MSDN, en el foro de VB.Net esta pregunta, ¿ Cómo puedo cambiar el color del borde de un control TextBox ?, anteriormente también se hizo la misma pregunta en este mismo foro donde yo respondí como hacerlo VB2010 4.0 - Como crear un textbox personalizado . no hay manera fácil de personalizar un control, generalmente se tiene que sobre escribir el evento WndProc para escuchar los mensajes de window y reemplazar la funcionalidad de estos según sea la necesidad o el control. bien, para cambiar el color del borde del control TextBox sin mucha funcionalidad, se debe de escuchar y reemplazar el funcionamiento de los mensajes WM_PAINT y WM_NCPAINT . ¿ Porque WM_PAINT ?, porque cuando cambiamos la propiedad BorderStyle de este control a FixedSingle, quien pinta el borde es el men...