Infragistics – UltraGrid (parte I)

Hola a tod@s,


Después de llevar bastantes meses (desde mi antiguo blog) prometiendo escribir sobre los controles de Infragistics voy a comenzar con un pequeño ejemplo de cómo rellenar un UltraGrid por código y darle algo de formato y funcionalidad.


Para el ejemplo voy a asar la base de datos AdventureWorks para SQL Server 2005 Express, y la versión de Infragistics 7.3 para CLR2 con VS2005.


Creamos una aplicación Windows Forms en C#. Arrastramos desde la toolbox un objeto UltraGrid


NOTA: Para tener los objetos de Infragistics en la barra de herramientas lo podemos hacer de forma tradicional (que no es muy idónea en este caso) o ejecutar la herramienta “Create Visual Studio Toolbox Tab” como muestro en la imagen:



Esto hace que nos aparezca una nueva pestaña en nuestra barra de herramientas con los controles de infragistics.


Cuando arrastramos un control UltraGrid en un formulario nos aparece un asistente para formatear el grid, pero para este ejemplo pulsamos en el botón finish y ponemos su propiedad Dock a Fill



Ahora en el evento Load del formulario accedemos a base de datos y rellenamos un DataTable para luego asociarlo al grid. Nos quedará algo como esto:





private DataTable dtDatos = new DataTable();

private void Form1_Load(object sender, EventArgs e)       

{

            SqlConnectionStringBuilder strCon = new SqlConnectionStringBuilder();
            strCon.IntegratedSecurity = true;
            strCon.DataSource = «CSANCHEZG»;
            strCon.InitialCatalog = «AdventureWorks»;
            using (SqlConnection con = new SqlConnection(strCon.ConnectionString))
            {
                using (SqlDataAdapter da = new SqlDataAdapter(«SELECT * FROM Production.Product», con))
                {
                    da.Fill(dtDatos);
                }
            }

           
ultraGrid1.DataSource = dtDatos;
            ultraGrid1.DataBind();

            FormateoGrid();

        }


Como podemos observar en el código, tenemos la llamada a un método que va a formatear nuestro grid, el código del método será:





private void FormateoGrid(){
            ultraGrid1.DisplayLayout.Override.AllowRowFiltering = Infragistics.Win.DefaultableBoolean.True;
            ultraGrid1.DisplayLayout.GroupByBox.Prompt = «Arrastra aquí alguna cabecera para agrupar por ella»;
            ultraGrid1.DisplayLayout.Override.RowSelectorHeaderStyle = Infragistics.Win.UltraWinGrid.RowSelectorHeaderStyle.ColumnChooserButton;           
            ultraGrid1.DisplayLayout.Override.RowSelectors = Infragistics.Win.DefaultableBoolean.True;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«ProductID»].Hidden=true;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«ProductID»].ExcludeFromColumnChooser = Infragistics.Win.UltraWinGrid.ExcludeFromColumnChooser.True;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«Name»].Header.Caption = «Nombre»;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«ProductNumber»].Header.Caption = «Número del Producto»;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«MakeFlag»].Hidden = true;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«MakeFlag»].ExcludeFromColumnChooser = Infragistics.Win.UltraWinGrid.ExcludeFromColumnChooser.True;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«FinishedGoodsFlag»].Hidden = true;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«FinishedGoodsFlag»].ExcludeFromColumnChooser = Infragistics.Win.UltraWinGrid.ExcludeFromColumnChooser.True;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«Color»].Hidden = true;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«Color»].Header.Caption = «Color»;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«SafetyStockLevel»].Header.Caption = «Cantidad mínima del inventario»;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«ReorderPoint»].Hidden = true;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«ReorderPoint»].Header.Caption = «Nivel del inventario»;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«StandardCost»].Hidden = true;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«StandardCost»].Header.Caption = «Costo estándar»;            ultraGrid1.DisplayLayout.Bands[0].Columns[«ListPrice»].Hidden = true;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«ListPrice»].Header.Caption = «Precio de Venta»;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«Size»].Header.Caption= «Tamaño»;
           
ultraGrid1.DisplayLayout.Bands[0].Columns[«SizeUnitMeasureCode»].Header.Caption = «Unidad de Medida del Tamaño»;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«WeightUnitMeasureCode»].Header.Caption = «Unidad de Medida del Peso»;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«Weight»].Header.Caption = «Peso»;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«DaysToManufacture»].Header.Caption = «Dias para crearlo»;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«ProductLine»].Header.Caption = «Linea del Producto»;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«Class»].Hidden = true;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«Class»].Header.Caption = «Clase»;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«Style»].Hidden = true;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«Style»].Header.Caption = «Estilo»;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«ProductSubcategoryID»].Hidden = true;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«ProductSubcategoryID»].Header.Caption = «Subcategoria del producto»;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«ProductModelID»].Hidden = true;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«ProductModelID»].Header.Caption = «Modelo»;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«SellStartDate»].Header.Caption = «Fecha inicio venta»;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«SellEndDate»].Header.Caption = «Fecha find venta»;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«DiscontinuedDate»].Header.Caption = «fecha de discontinuidad»;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«rowguid»].Hidden = true;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«rowguid»].ExcludeFromColumnChooser = Infragistics.Win.UltraWinGrid.ExcludeFromColumnChooser.True;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«ModifiedDate»].ExcludeFromColumnChooser = Infragistics.Win.UltraWinGrid.ExcludeFromColumnChooser.True;
            ultraGrid1.DisplayLayout.Bands[0].Columns[«ModifiedDate»].Hidden = true;
         } 

La propiedad ultraGrid1.DisplayLayout.Override.AllowRowFiltering hace que nos aparezcan unos botones en la cabecera los cuales nos dan la posibilidad de filtrar.



Las propiedades ultraGrid1.DisplayLayout.Override.RowSelectorHeaderStyle = Infragistics.Win.UltraWinGrid.RowSelectorHeaderStyle.ColumnChooserButton; y
            ultraGrid1.DisplayLayout.Override.RowSelectors = Infragistics.Win.DefaultableBoolean.True; nos dan la posibilidad de que podamos elegir las columnas que queremos mostrar u ocultar con un botón a la izquierda de la cabecera.







La propiedad ultraGrid1.DisplayLayout.GroupByBox.Prompt = «Arrastra aquí alguna cabecera para agrupar por ella»; nos permite (tal y como se ve) poner el texto que queramos, por defecto es un texto en inglés.


Para cada columna he usado las siguientes propiedades:

Hidden:  hace que el campo no aparezca, pero no quiere decir que no aparezca en el selector de columnas.
ExcludeFromColumnChooser : esta propiedad hace que no aparezca en el selector de columnas con lo que si el campo es visible, el usuario nunca podrá ocultarlo y si es invisible, el usuario nunca lo podrá ver.
Header.Caption : es el texto de la cabecera de cada columna.


Hay muchísimas propiedades que si os interesa podéis ir investigando.


Y para acabar el ejemplo, quiero que cuando el tamaño sea “XL” el fondo de la fila se muestre en rojo con un degradado. Para ello uso el evento InitializeRow del UltraGrid





private void ultraGrid1_InitializeRow(object sender, Infragistics.Win.UltraWinGrid.InitializeRowEventArgs e)
        {
            if (e.Row.Cells[«Size»].Value.ToString().Trim() == «XL»)
            {
                e.Row.Appearance.BackColor = Color.Red;
                e.Row.Appearance.BackColor2 = Color.White;
                e.Row.Appearance.BackGradientStyle = Infragistics.Win.GradientStyle.Vertical;
            }
        }


Espero que les haya interesado el artículo.


Saludos.

40 comentarios sobre “Infragistics – UltraGrid (parte I)”

  1. Muy bien Carmen!!!!, no sabes como me viene [:D]. Tengo que tener un ejemplo montado para esta mañana. Ya te contaré que tal.

    Esperaré los siguientes posts.

    Saludos!!

  2. Una duda, disculpa la ingorancia pero tengo poco en infragistics, ¿quisiera saber como le doy a las columnas la propiedad de ordenarlas ascendente o descendentemente al dar click en la cabecera de cada columna?

    te dejo mi correo por favor contestame aqui y ahi si?

    drowssap_drowssap@hotmail.com

  3. Creo que el Google Desktop Seacrh no hace busquedas a traves del buscador en tu equipo, sino que añade una pagina extra llamada desktop. Al pulsar en esa pagina, podrás observar como, en la dirección o URL en vez de poner wwww.google.es/yoquesequé/yonoséqué pone 127.0.0.1 que es lo que se llama la dirección de loopback, es decir, tu propio ordenador. Lo´único que hace es añadir una pagina extra cuando entras en google, pero ahí se acaba el “matrimonio” entre Google y tu ordenador.

    Yo uso los dos buscadores dentro de mi ordenador, a falta de pan buenas son tortas, y te digo que los dos me fallan, son conceptos distintos, y que ninguno de los dos me cunde el 100%

  4. Gon,

    Para hacer que en un ultragrid se pueda ordenar por una columna al clicar sobre ella lo puedes hacer mediante codigo así

    ultraGrid1.DisplayLayout.Override.HeaderClickAction = Infragistics.Win.UltraWinGrid.HeaderClickAction.SortMulti;

    De la documentacion de Infragistics, los posibles valores del HeaderClickAction son:

    Default: The setting of the object’s parent will be used (or ‘Select’ if not parent is set to default)

    Select: Selects the column or group (based on the setting of the SelectTypeCol property)

    SortSingle: Changes the sort indicator for the column after clearing all other columns’ sort indicators

    SortMulti: Changes the sort indicator for the column. If the shift key is pressed does not clear other columns sort indicators

    ExternalSortSingle: Same as SortSingle except with ExternalSortSingle UltraGrid won’t perform the sort itself. This is useful if you want to sort externally through the data source. You can hook into the UltraGridBase.AfterSortChange event and apply the sort to the external data source

    ExternalSortMulti: Same as SortMulti except with ExternalSortMulti UltraGrid won’t perform the sort itself. This is useful if you want to sort externally through the data source. You can hook into the UltraGridBase.AfterSortChange event and apply the sort to the external data source

    Espero haberte resuelto la duda.

    Un saludo.

  5. quisiera saber como recuperar el indice de una fila cuando agrupo por alguna columna que me devuelva el mismo que cuando tengo el ultragrid sin agrupar

  6. Hola,

    Tengo un ultrawebgrid que entre otras, contiene una columna con fechas y quiero que cuando se inicie el grid, ordene por defecto la columna de la fecha.

    He conseguido ordenar haciendo clic en el header, pero quiero que cuando se carge la página ya aparezca ordenado el grid por la columna de la fecha.

    Un saludo y gracias.

  7. Creo que los controles de Infragistic para windows son excepcionales la verdad.

    En mi aplicación tengo un botón que según la fila que esté seleccionada en el grid me abre otro formulario para editar los valores.
    Una vez editados se cierra el formulario y recargo el grid para actualizarlos el el primero.

    Mi pregunta es la siguiente:

    ¿ Hay alguna manera «simple» de mantener los filtros, agrupaciones, filas seleccionadas, activas y la posición del scroll anterior a la carga del grid ?

    o ¿ tengo que almacenar todos estos datos en variables para, al recargar, volverselos a asignar ?

    Si es así, ¿Como se podría hacer? ya que casi todo hace referencia a Rows anteriores, que son diferentes al hacer el databinding.

    Un saludo: Pere,programacion@doblemente.com

  8. hola,

    tengo un tab con 2 pestañas y dentro de cada tab tengo un ultrawebgrid. El primer ultrawebgrid se llena desde bd, el cual, al darle doble clic, me llena el grid del 2do tab.
    Lo que requiero es poder modificar las celdas del primer grid y acualizarlas en la bd, active la opcion para la mofificacion , pero al querer grabar, como hizo postback no me toma los datos que modifique en el grid, solo los muestra en la pantalla pero cuando quiero tomar el dato me trae el de la bd.

    Como puedo obtener el dato que tengo escrito en la celda del grid?

    Espero me haya explicado..

    Saludoss…

  9. Hola Gaby,

    Si el grid lo tienes bindado a un datatable puedes usar el método GetChanges() para obtener tanto las filas nuevas, modificadas o borradas y hacer lo propio en la base de datos al grabar.

    Si es un dataset, sería user GetChanges() de cada tabla del dataset que se usa en el grid.

    Saludos.

  10. Por favor me pueden colaborar estoy trabajando con infragistic V8.1, necesito capturar los valores de un UltraOptionSet y de un UltraComboEditor como lo hago. Por ejemplo para:

    UltraOptionSet 1. Activo, 0. Inactivo

    UltraComboEditor: 0 Cédula, 1, Pasaporte, 2 Tarjeta Identidada

    por favor podrían colaborarme con esto….

    Gracias

  11. Hola.
    Tengo un par de consultas que creo que a los que tienen experiencia les resultará fácil contestar.

    – Como hago para teniendo seleccionada una fila (puede ser en cualquier columna de la misma) me devuelva el valor de alguna de las celdas de esa fila ?
    En VB6 por ejemplo en la gilla que utilizaba había una opción que era «grilla.textmatrix (Fila,Columna)» para dar un ejemplo de otra grilla.

    Aqui como sería ?

    Saludos
    Diego

  12. Hola a todos !
    Mi consulta debe ser muy sencilla de resolver para ustedes.
    Necesito asociar un ultradropdown a una columna de un ultragrid en VB .net 2008

    La finalidad es que el usuario al hacer clic en una celda despliegue un dropdown y elija un valor.

    ¿Tienen un ejemplo?

    Por favor su ayuda.

  13. esta buena tu pagina y me pudes proporcionar lo referente a usar Infragistics estoy programando en visual studio 2005

    gracias

    eres bueno en esto

  14. El material está muy bueno, pero existe alguna manera de clickear una letra y que el filtro o mismo en la grilla vaya directo a la palabra o número correspondiente a la letra que presionamos??
    Gracias..

  15. Como puedo llenar un ulrtagrid de forma manual,aso como lleno este data grid:
    DataGridView1.Rows.Add()
    DataGridView1.Rows(i).Cells(0).Value = aryTextFile(0)
    DataGridView1.Rows(i).Cells(1).Value = valincidencia
    DataGridView1.Rows(i).Cells(2).Value = aryTextFile(2)
    DataGridView1.Rows(i).Cells(3).Value = aryTextFile(3)

    asi quisiera llenar un ultragrid.Podrias ayudarme, en visual basic.net

    contesta a mi mail porfavor.

    mail: antonioh1619@yahoo.com.mx

  16. necesito saber como puedo meter en una lista las filas del ultragrid que han sido modificadas ?

    en el datagrid lo hago asi:
    Private registros As New List(Of DataGridViewRow)

    Private Sub grdSoftware_CellValueChanged( _
    ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) _
    Handles grdSoftware.CellValueChanged

    If e.RowIndex = -1 Then Return

    Dim registro As DataGridViewRow = _
    grdSoftware.Rows(e.RowIndex)

    If Not registros.Contains(registro) Then
    ‘ Si no existe el registro en la lista,
    ‘ lo añadimos.

    registros.Add(registro)
    End If
    pero no se hacerlo en el ultrawingrid

  17. hola soy nuevo usando infragistics, quisiera preguntarles algo q no he podido resolver , tengo y tap con 2 pestanas y un ultrawebgrid en cada una, y cuando lleno mi grid en la primera pestana y lo selecciono manda valores al otro grid en la segunda pestaña, el problema esta en q al momento de seleccionar la fila del grid tengo q darle doble clic a la fila para q pueda mandar los valores y quisiera saber como puedo hacerlo con solo darle un solo clic a la fila, espero puedan ayudarme, si alguien quiere puede mandarme la informacion a mi correo es EdgarDan_Samu@hotmail.com gracias espero su respuesta

  18. tengo un problema con un ultrabebgrid debo insertar dos registros en la misma celda pero no se como hacerlo. Estos registros se seleccionan en un CheckBoxList y los seleccionados se deben insertar en en una misma celda en el UltraWebGrid pero aun no he logrado hacerlo si alguien puede ayudarme gracias por adelantado

  19. Hola que tal, necesito de su ayuda…

    Como puedo crear o manipular un ultragrid por medio de botones, es decir quiero que al picar un boton me visualice cierta información solamente, como los tiene el ultragrid en Designer, pero quiero manipular a travez de botones… les agradecería mucho.
    mi mail es serveqQhotmail.com

  20. Hola mil gracias por todos sus comentarios apenas estoy estudiando el visual 2010 pero me quede atorado en esta opcion: tengo un ultragrid del cual lo vincule con un UltraGridRowEditTemplate todo va bien me sale la ventana de modificacion y cambio los datos pero noto que se guardan en la rejilla pero no en la base de datos hay alguna forma de corregir esto ya que no puedo guardar los datos en la base de datos

    de ante mano mil gracias

  21. Como puedo poner un UltraGrid de solo lectura es decir que no puedan editar los valores de las celldas al hacer click dentro de ellas,

    Les agradeceria su ayuda, de antemano gracias

  22. Different students that are searching for the knowledge connected with written essays from the essay writing service would use your interesting story connected with this topic. Other way, that’s possible to utilize the support of the essay writing service.

  23. Buenos dias,

    Mi problema es el siguiente:

    Yo tengo un ultragrid con 3 filas y 6 columnas. La primera y ultima fila, tienen en la primera columna el valor «SI», y en estos casos, quisiera que un botón que tengo para editar la fila que en ese momento tengo seleccionada, se inhabilite, es decir, si el valor de la primera columna del registro que tenga el «bookmark» (trinagulito negro de la primera columna de los grid) es igual a SI, entonces inhabiligar el boton «Editar».

    No se ni en que evento lo tengo que poner, ni como acceder al bookmark.

    Gracias de antemano.

  24. Buenos dias,

    Mi problema es el siguiente:

    Yo tengo un ultragrid con 3 filas y 6 columnas. La primera y ultima fila, tienen en la primera columna el valor «SI», y en estos casos, quisiera que un botón que tengo para editar la fila que en ese momento tengo seleccionada, se inhabilite, es decir, si el valor de la primera columna del registro que tenga el «bookmark» (trinagulito negro de la primera columna de los grid) es igual a SI, entonces inhabiligar el boton «Editar».

    No se ni en que evento lo tengo que poner, ni como acceder al bookmark.

    Gracias de antemano.

  25. Hola a todos,

    ¿Alguien me podria decir como puedo editar el contenido de una columna concreta de un grid de infrafistic? Resulta que yo cargo los datos con una query devuelta por LINQ, y necesito poder editar una celda (o mejor dicho, cualquier celda de una determinada columna) ya que el grid me debe permitir modifivar los valores de un determinado campo.

    He probado con :

    Ultragrid.DisplayLayout.Bands(0).Columns(8).CellActivation = Infragistics.Win.UltraWinGrid.Activation.AllowEdit

    pero no hay forma.

    Gracias de antemano

  26. hola muy buen ejemplo con ultragrid de infragistic.aqui mi problema es como puedo llevar lo que contenga el ultragrid a Cristal report..incluyendo si yo filtro informacion, y esa informacion filtrada en el ultragrid la pueda pasar a cristal report.ojala y me puedan ayudar. gracias

Responder a anonymous Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *