sábado, 22 de septiembre de 2012

¿Como se puede obtener la imagen de la fila seleccionada de un GridControl?

¿En un GridControl donde se cargan imágenes en cada registro, como se puede obtener la imagen correspondiente a la fila seleccionada?


Agradeceriamos el apoyo de los seguidores del blog.......

sábado, 2 de junio de 2012

EXTRAER LAS DEPENDENCIAS DE UNA O MÁS TABLAS SQLServer por Angel Horberg

Bueno antes que nada como se que mi gran amigo Raciel Moreno es Netcero y SQLsero y como no me va adar tiempo de registrarme para publicar (Si lo considera importante lo publicará) aporto algo relacionado a EXTRAER LAS DEPENDENCIAS DE UNA O MÁS TABLAS SQLServer desde código, el ejemplo que expongo extraigo las dependencias de varias tablas (No es necesario indicar es muy obvio el código), una vez extraiudas las dependencias las meto en un CURSOR itero este y elimino el contendio de estas dependencias, al final ELIMINO el contendio de las tablas principales de las cuales extraje las dependencias, eh acá el codigo del PROCEDIMEINTO ALMACENADO:

CREATE PROCEDURE dbo.DeleteDependenciasEmpleados
AS
BEGIN
DECLARE @nombreTabla varchar(255)
DECLARE @query VARCHAR(500)

DECLARE cursosrEmpleados CURSOR FOR

SELECT FK_Table = FK.TABLE_NAME FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (SELECT TC.TABLE_NAME, CU.COLUMN_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON TC.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
WHERE TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT ON PT.TABLE_NAME = PK.TABLE_NAME
WHERE PK.TABLE_NAME = 'Empleados'
OR PK.TABLE_NAME = 'HNSS'
OR PK.TABLE_NAME = 'HNum_ISSSTE'
OR PK.TABLE_NAME = 'HHcta_FOVISSSTE'
OR PK.TABLE_NAME = 'HFecha_Alta_Gob_Fed'
OR PK.TABLE_NAME = 'HFecha_Alta_SEP'
OR PK.TABLE_NAME = 'HFecha_Alta_Rama'
OR PK.TABLE_NAME = 'HForte'
OR PK.TABLE_NAME = 'HQn_Quinquenio'
OR PK.TABLE_NAME = 'HAn_Quinquenio'
OR PK.TABLE_NAME = 'RGrado_Academico'
ORDER BY 1

-- Apertura del cursor
OPEN cursosrEmpleados
-- Lectura de la primera fila del cursor
FETCH cursosrEmpleados INTO @nombreTabla

WHILE (@@FETCH_STATUS = 0 )
BEGIN
PRINT @nombreTabla
EXECUTE ('DELETE FROM '+ @nombreTabla)
-- Lectura de la siguiente fila del cursor
FETCH cursosrEmpleados INTO @nombreTabla
END

--Elimino a mano todas las tablas qu een teoria son las del Layout
PRINT 'Empleados'
EXECUTE ('DELETE FROM Empleados')
PRINT 'HNSS'
EXECUTE ('DELETE FROM HNSS')
PRINT 'HNum_ISSSTE'
EXECUTE ('DELETE FROM HNum_ISSSTE')
PRINT 'HHcta_FOVISSSTE'
EXECUTE ('DELETE FROM HHcta_FOVISSSTE')
PRINT 'HFecha_Alta_Gob_Fed'
EXECUTE ('DELETE FROM HFecha_Alta_Gob_Fed')
PRINT 'HFecha_Alta_SEP'
EXECUTE ('DELETE FROM HFecha_Alta_SEP')
PRINT 'HFecha_Alta_Rama'
EXECUTE ('DELETE FROM HFecha_Alta_Rama')
PRINT 'HForte'
EXECUTE ('DELETE FROM HForte')
PRINT 'HQn_Quinquenio'
EXECUTE ('DELETE FROM HQn_Quinquenio')
PRINT 'HAn_Quinquenio'
EXECUTE ('DELETE FROM HAn_Quinquenio')
PRINT 'RGrado_Academico'
EXECUTE ('DELETE FROM RGrado_Academico')

-- Cierre del cursor
CLOSE cursosrEmpleados
-- Liberar los recursos
DEALLOCATE cursosrEmpleados
END

miércoles, 16 de mayo de 2012

Consideraciones en el GridControl Maestro-Detalle.

En un proyecto que estoy llevando a cabo, me vi a la necesidad de mostrar un GridControl (Maestro-Detalle) pero que tiene dos Detalles, es decir, un DataSet con tres DataTable, donde dos tablas dependen de la misma; de acuerdo a las entradas anteriores esto es posible si lleva al pie de la letra, salvo un detalle que se presenta cuando se ejecuta el proyecto.....

El detalle es el siguiente: Al momento de llenar el DataSet y enlazarlo al GridControl y ejecutarlo, este no muestra como activo el icono (+) para desplegar los detalles de la tabla que pertenezca a la segunda relación del DataSet, pero sin embargo si le haces clic al icono, se despliega correctamente el detalle aunque este en color gris inactivo, y solo se va a mostrar como activo cuando la tabla de la primera relación tenga datos.

Un ejemplo:

1. Creas el DataSet
2.-Creas el DataTable Maestro
3.-Creas el primer DataTable Detalle
4.-Creas el segundo DataTable Detalle
5.- Creas la primera relación (DataTable Maestro - primer DataTable Detalle)
6.- Creas la segunda relación (DataTable Maestro - segundo DataTable Detalle) 


Para solucionar este detalle, después de hacer el DataSource sobre el GridControl se debe escribir el siguiente código:

GridViewMaestro.OptionsDetail.SmartDetailExpandButtonMode = DetailExpandButtonMode.CheckAllDetails;

y en la propiedad ChildGridLevelName de los dos GridView detalles, ponerle el nombre de la la relacion correspondiente (tome en consideracion la entrada Maestro-Detalle)


Si te servio comenta por favor.

Saludos

viernes, 20 de abril de 2012

Drag And Drop entre GridControl´s de DevExpress



Drag and Drop entre GridControl´s de DevExpress

Objetivo: Arrastrar los DataRows de un GridControl(Origen) al GridControl(Destino) en la tabla detalle, ya que su estructura es Maestro-Detalle.

Insertamos dos controles GridControl al formulario

Diseñando el GridDestino:






Creamos un nivel al Gridcontrol principal el cual lo llamamos Detalle












Diseñando el GridOrigen:

El GridOrigen debe tener la misma estructura que el GridView(detalle) del Grid destino


Agregando codigo para cargar de información los GRIDS

Agregamos el siguiente código en el Load del form para construir el DataSource de los Grids y llenarlos de información.




 Dim ds As New DataSet()



Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'Creamos un dataset y le agregamos tablas
        With ds.Tables
            .Add("maestro")
            .Add("detalles")
        End With

        'Cramos las columnas de las tablas
        With ds.Tables("maestro").Columns
            .Add("idMaestro")
            .Add("descripcionMaestro")
        End With

        With ds.Tables("detalles").Columns
            .Add("idDetalle")
            .Add("descripcionDetalle")
            .Add("idMaestro")
        End With

        'Agregamos la relacion entre las tablas donde el nombre debe coincidir con el nombre del DataView detalle
        ds.Relations.Add("Detalle", ds.Tables("maestro").Columns("idMaestro"), ds.Tables("detalles").Columns("idMaestro"))

        'Agregamos registros a las tablas
        With ds.Tables("maestro").Rows
            .Add("1", "Registro 1")
            .Add("2", "Registro 2")
            .Add("3", "Registro 3")
            .Add("4", "Registro 4")
            .Add("5", "Registro 5")
        End With

        With ds.Tables("detalles").Rows
            .Add("1", "detalle 1", "1")
            .Add("2", "detalle 2", "1")
            .Add("3", "detalle 3", "2")
            .Add("4", "detalle 4", "3")
            .Add("5", "detalle 5", "3")
            .Add("6", "detalle 6", "3")
        End With

        'Enlazamos el GridControlM al DataSet
        GridControlM.DataSource = ds
        GridControlM.DataMember = "maestro"


        'Cargamos mas detalles al Grid origen, que son lo que vamos a arrastrar al GridControlM(Destino)
        Dim tablaOrigen As New DataTable
        With tablaOrigen.Columns
            .Add("idDetalle")
            .Add("descripcionDetalle")
        End With


        With tablaOrigen.Rows
            .Add("1", "detalle 1")
            .Add("2", "detalle 2")
            .Add("3", "detalle 3")
            .Add("4", "detalle 4")
            .Add("5", "detalle 5")
            .Add("6", "detalle 6")

            .Add("7", "Otro detalle 7")
            .Add("8", "Otro detalle 8")
            .Add("9", "Otro detalle 9")
            .Add("10", "Otro detalle 10")
            .Add("11", "Otro detalle 11")
            .Add("12", "Otro detalle 12")
            .Add("13", "Otro detalle 13")

        End With

        GridControlO.DataSource = tablaOrigen
    End Sub

En tiempo diseño establecemos la propiedad AllowDrop de los dos Grids a TRUE

Importamos los siguientes namespaces

Imports DevExpress.XtraGrid.Views.Grid
Imports DevExpress.XtraGrid.Views.Grid.ViewInfo
Imports DevExpress.XtraGrid

Ejecutamos el Form..y el primera instancia debe quedar de la siguiente manera:






Ahora viene lo bueno………………


Entramos al diseñador del Gridcontrol Origen, seleccionamos el GridView principal y generamos dos eventos haciendo doble clic sobre ellos, tal como se muestra en la imagen





Generamos el evento DragDrop y el DragOver del Gridcontrol Destino

Insertamos el siguiente código en el evento correspondiente

    Dim downHitInfo As GridHitInfo = Nothing
   

    Private Sub GridView2_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles GridView2.MouseMove
        Dim view As GridView = sender
        If e.Button = MouseButtons.Left And downHitInfo IsNot Nothing Then
            Dim dragSize As Size = SystemInformation.DragSize
            Dim dragRect As New Rectangle(New Point(downHitInfo.HitPoint.X - dragSize.Width / 2, downHitInfo.HitPoint.Y - dragSize.Height / 2), dragSize)
            If Not dragRect.Contains(New Point(e.X, e.Y)) Then
                Dim row As DataRow = view.GetDataRow(downHitInfo.RowHandle)
                view.GridControl.DoDragDrop(row, DragDropEffects.Move)
                downHitInfo = Nothing
                DevExpress.Utils.DXMouseEventArgs.GetMouseArgs(e).Handled = True
            End If
        End If
    End Sub

    Private Sub GridView2_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles GridView2.MouseDown
        Dim view As GridView = sender
        downHitInfo = Nothing
        Dim hitInfo As GridHitInfo = view.CalcHitInfo(New Point(e.X, e.Y))
        If Control.ModifierKeys <> Keys.None Then Exit Sub
        If e.Button = MouseButtons.Left And hitInfo.RowHandle >= 0 Then
            downHitInfo = hitInfo
        End If
    End Sub

Private Sub GridControlM_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles GridControlM.DragDrop
        'Identificamos el DataRow del origen
        Dim row As DataRow = e.Data.GetData("System.Data.DataRow", True)

        '// Identificamos el DataRow destino
        Dim grid As GridControl = sender

        'El gridview corresponde al que este elmazado con gridcontrol en mi caso es GridView1

        Dim hitInfo As GridHitInfo = GridView1.CalcHitInfo(grid.PointToClient(New Point(e.X, e.Y)))
        Dim targetRow As Integer = hitInfo.RowHandle
        Dim r As DataRow = GridView1.GetDataRow(targetRow)


        'Lo insertamos en el table detalle y refrecamos el GRID


        'Verificar si la asignacion ya existe
        If ds.Tables("detalles").Select("idDetalle='" & row("idDetalle") & "' and idMaestro='" & r("idMaestro") & "'").Length > 0 Then
            MessageBox.Show("¡La relación ya existe!.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning)
            Exit Sub
        End If

        'Insertamos el registro en el DataSource
        ds.Tables("detalles").Rows.Add(row("idDetalle"), row("descripcionDetalle"), r("idMaestro"))

        'Refrecamos el DataSource
        GridControlM.RefreshDataSource()

        '/*Ejecutar transacciones correspondientes sobre la base de datos*/

    End Sub

    Private Sub GridControlM_DragOver(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles GridControlM.DragOver
        ' /*Generación de efecto arrastre*/
        If e.Data.GetDataPresent("System.Data.DataRow", False) Then
            e.Effect = DragDropEffects.Move
        Else
            e.Effect = DragDropEffects.None
        End If
    End Sub



¿Pero como eliminamos un registro que haya arrastrado de manera equivocada?


Generamos el evento MouseUp del GridView detalle del GridControl destino, tal como se muestra en la imagen.





Insertamos el siguiente código

Dim rowDelete As DataRow
Private Sub GridView3_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles GridView3.MouseUp
        Dim view As GridView = sender
        rowDelete = view.GetDataRow(view.GetSelectedRows()(0))
    End Sub


Ahora insertaremos un ContrextMenuStrip y lo asignaremos al GridControl Destino, para realizar la eliminación del registro




Insertamos el siguiente código, uno en el evento...y el otro en el boton eliminar...

  Private Sub GridView3_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles GridView3.MouseUp
        Dim view As GridView = sender
        rowDelete = view.GetDataRow(view.GetSelectedRows()(0))
    End Sub
   
    Private Sub EliminarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EliminarToolStripMenuItem.Click
        Try             
            ' Eliminamos el DataRow del DataSource del Grid
            ds.Tables("detalles").Rows.Remove(rowDelete)
            GridControlM.RefreshDataSource() '*Refrecamos

        Catch ex As Exception
            'No hay registros por eliminar
        End Try
    End Sub


Ahora ya pueden arrastrar registros de un Grid a otro…
asi mismo eliminarlos si es que se equivocaron…

El proceso de eliminación o inserción sobre alguna tabla de la base de datos queda de ustedes…………………

Saludos……

Deja tus comentarios……………



miércoles, 4 de abril de 2012

jueves, 22 de marzo de 2012

La Hoja de Ruta de 2012 DevExpress



En este momento el año pasado, señaló las nuevas tecnologías que íbamos a invertir en el año, todo de Silverlight 5 (pero por muy poco!) A ASP.NET MVC 3, y sin olvidar Delphi de 64 bits. Nosotros, por supuesto, integrar a todos en nuestros productos durante el año 2011 para ayudarle a crear aplicaciones visualmente impresionantes sin importar en qué plataforma de Microsoft que utilice.
Hubo, sin embargo, una nueva e importante tecnología que surgió rápidamente como una nueva área de interés para nosotros: la Developer Preview de Windows 8, con el Metro, WinRT, y el aumento del tacto en planes a largo plazo de Microsoft. Desde el anuncio en septiembre en el / / construir / conferencias, ponemos nuestros equipos de desarrollo trabajando para ofrecerle la posibilidad de empezar la migración a la Metro-inspirados en aplicaciones en las plataformas de destino que en la actualidad. A medida que estas nuevas tecnologías se dieron a conocer, se hizo evidente para nosotros que la industria está experimentando un punto de inflexión, que dará lugar a una nueva generación de herramientas de DevExpress. Llamamos a este cambio "DXv2" para indicar nuestra intención de apoyar este cambio a la táctil, visualmente impactantes, fáciles de aplicaciones basadas en.
El mundo de la informática está cambiando. Los usuarios esperan que las aplicaciones que no sólo funcionan con facilidad, pero que son visualmente atractiva de usar y fácil de aprender. Cuando los usuarios comienzan a pensar en "apps" que vemos pasar a las expectativas de soluciones ágiles que se ocupan de problemas específicos de negocio. Los usuarios también están exigiendo el uso de sus aplicaciones a través de dispositivos y plataformas.Mientras que en la oficina están utilizando su experiencia del cliente tradicional, cuando en el camino que están utilizando sus pizarras y iPads, y sin importar la ubicación que está en el teléfono. La aceleración de las expectativas de los usuarios representa un desafío para los departamentos de TI y desarrolladores por igual. En DevExpress reconocemos que la satisfacción de las necesidades de su usuario significa no sólo con las herramientas y plataformas que usted está familiarizado con la actualidad, sino también aprender las nuevas tecnologías para apoyar a estos nuevos escenarios controladas por el usuario. Con DXv2 estamos haciendo un esfuerzo específico para construir un puente entre las tecnologías que usted está familiarizado con (Windows Forms, WPF, ASP.NET, Silverlight) y nuevas áreas de inversión como WinRT, HTML5, y soporte para soluciones móviles. Vamos a dar el paso a la siguiente generación con ustedes y estamos muy emocionados de explorar lo que nos depara el futuro.
Así que, ¿qué sabemos del futuro en este punto en el tiempo? En pocas palabras: el 2012 va a ser el año de Visual Studio 11 y Windows 8. No veo nada en el horizonte que es de tal importancia ya que estas dos tecnologías. El desarrollo del cliente va a evolucionar con WinRT y ASP.NET (y MVC) seguirá creciendo en influencia, especialmente con las órbitas de apriete de todo el ecosistema de HTML5/CSS3/JavaScript conjunto.
Para apoyar estas inversiones en tecnología, DevExpress le proporcionará el tipo de diseñador expresa y fácil de usar y flexibles para desarrolladores controles para Metro y WinRT que ha llegado a depender de nuestro producto actual line-up. Si bien el panorama para Windows 8 está todavía en desarrollo y estamos (como usted) sigue trabajando con una vista previa ahora cinco meses de edad, usted puede estar seguro de que nuestros mejores diseñadores y desarrolladores ya están trabajando duro para comprender los nuevos paradigmas y los nuevos dispositivos que Se espera que en apoyo de esta plataforma.
Una vez más este año, vamos a proporcionar dos versiones principales del año en todas nuestras plataformas, con versiones menores sobre una base mensual.El primer lanzamiento importante del año tendrá lugar a finales del segundo trimestre, y el último segundo en el cuarto trimestre. Estamos muy conscientes de la liberación de nuestros productos, siempre que sea posible, en conjunto con los nuevos lanzamientos de Microsoft, por lo que será la adaptación de nuestro plan de trabajo para alinear a la nueva información cuando esté disponible.
Como es habitual, sin embargo, tengo que suene mi nota estándar de cuidado.El plan de trabajo es nuestra mejor estimación en este punto en el tiempo de lo que deberíamos ser capaces de hacer en el año 2012, teniendo en cuenta nuestros recursos y nuestra comprensión del panorama de la tecnología en los que operamos. Todas las fechas dadas son estimaciones. Cualquier funcionalidad que describimos en este plan de trabajo, especialmente el más lejos que sea, puede ser pospuesta o cancelada por completo. Recomendamos a todos nuestros clientes de no hacer planes en firme sobre la base de lo que ven aquí: en una industria como la nuestra, las cosas pueden cambiar muy rápidamente y tenemos que reaccionar con la misma rapidez a las nuevas oportunidades que puedan presentarse.
Si eso no suena la nota requerida, una advertencia más fuerte que se necesita.Como he dicho, ya sabemos que el panorama la tecnología de Microsoft va a cambiar, sin embargo, son actualmente muy reservado sobre los detalles. En este momento no sabemos exactamente lo que quedará reflejado: hemos hecho nuestras conjeturas, pero no son clarividentes. 

Splash Screen Manager Overview

El componente SplashScreenManager, enviado con la Biblioteca XtraEditors,gestiona la creación y visualización de las formas y las imágenes de salpicaduras.Las formas específicas del chapoteo apoyan la visualización automática en el inicio de su formulario principal, mientras que otras formas de salpicaduras quese muestra de forma manual y se cierra. Tome en cuenta que las formas de salpicaduras son invocados por el Administrador de pantalla de bienvenida en un hilo separado.
Formas Splash


Las formas de salpicaduras son compatibles.


• Una pantalla de bienvenida - es una forma de presentación que se puedemuestra automáticamente en el inicio de su formulario principal. Utilizando una pantalla de bienvenida, también es posible mostrar una imagen personalizada como una pantalla de bienvenida. Ver pantalla de bienvenida y la imagen de bienvenida para aprender más.

 Un formulario de espera - es un pequeño formulario que contiene una imagen animada (obtenido de la piel de corriente) y dos etiquetas, diseñadas para mostrar el progreso de cualquier operación. Visualización automática de los formularios de espera en el inicio del formulario principal no es compatible. VerEspere formulario para aprender más.

Estos formularios se pueden crear en tiempo de diseño. Una vez que un componente SplashScreenManager se ha añadido a su forma principal, utilice el panel del componente Tareas para crear una pantalla de bienvenida o un formulario de espera.


 Al hacer clic en la pantalla de bienvenida para agregar y / o Agregar tiempo de espera Enlaces Formulario de generar formas de salpicaduras - SplashScreen y descendientes WaitForm clase. Estas formas pueden ahora personalizarlibremente en tiempo de diseño.


La disposición de todas las formas de salpicaduras se pueden personalizar de acuerdo a sus necesidades. Usted puede cambiar todas las etiquetas y las imágenes, añadir otros personalizados, etc



NoteNota

Una imagen animada que muestra las formas de espera se obtiene del skin actual. Por lo tanto, para reemplazar la imagen por defecto, utilice la herramienta Editor de máscaras.

NoteNota

Pantallas de inicio y Formularios de espera se generan en tiempo de diseño en archivos separados (por ejemplo, SplashScreen1.cs, WaitForm1.vb). Si decideagregar manualmente clases personalizadas a estos archivos, por favor, tenga en cuenta que la clase que encapsula una Pantalla de bienvenida / Espera formulario debe ser definido por primera vez en estos archivos antes de las clases personalizadas.



Ajustar columnas de un GridView al contenido de los camps desde código.

  gridView1.OptionsBehavior.AutoPopulateColumns = true; //'generar automaticamente las columnas a raíz del dataset             gridVie...