Your Privacy Matters: We use our own and third-party cookies to improve your experience on our website. By continuing to use the website we understand that you accept their use. Cookie Policy
420
Categorize multiple columns under a single header
posted

Hello Folks,

                    I am developing a WinForms Application and UltraWinGrid plays a major role in my application. I get the datasource by querying on sql tables and bind it to ultrawingrid. So, the columns are dynamic and I would be having numerous columns in my grid. Now, in order to avoid confusion for the user after seeing numerous columns, I have planned to categorize the columns to their respective category.For eg; Assume the following scenario

I have 9 columns starting from Column1,Column2.......Column9 which is in a sequential manner.Now I want to divide the 9 columns into three categories namely Category1,Category2,Category3. So, each Category consists of 3 columns.

How to implement this? Any help would be of great use.......

  • 420
    posted in reply to Mike Saltzman

    @Mike

    Yes, I used RowLayoutGrouping as you said.......But, there are some ungrouped columns in my Grid too....The issue that am facing now is that all the grouped columns always precede the ungrouped columns and also the ungrouped columns are never getting spanned according to the grouped column header's height.......I hope you get my point....I have attached a snapshot of the output that I got........you would be able to get my issue......

    RowLayoutGroupingSample.cs

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    using Infragistics.Win.UltraWinGrid;
    using Infragistics.Win;

    namespace RowLayoutGroupingSample
    {
        public partial class frmRowLayoutSample : Form
        {
            public frmRowLayoutSample()
            {
                InitializeComponent();
            }

            private void frmRowLayoutSample_Load(object sender, EventArgs e)
            {
                try
                {
                    DataTable dt = new DataTable();
                    dt.Columns.Add("Salary", typeof(double));
                    dt.Columns.Add("EmpNo", typeof(int));
                    dt.Columns.Add("EmpName", typeof(string));
                    dt.Columns.Add("DepartmentNo", typeof(int));
                    dt.Columns.Add("DepartmentName", typeof(string));
                    DataRow drow = dt.NewRow();
                    drow["Salary"] = "12,000.00";
                    drow["EmpNo"] = 1;
                    drow["EmpName"] = "Raghu";
                    drow["DepartmentNo"] = 1;
                    drow["DepartmentName"] = "CSE";
                    dt.Rows.Add(drow);
                    dt.AcceptChanges();
                    DataRow drow1 = dt.NewRow();
                    drow1["Salary"] = "20,000.00";
                    drow1["EmpNo"] = 2;
                    drow1["EmpName"] = "Vairam";
                    drow1["DepartmentNo"] = 2;
                    drow1["DepartmentName"] = "CSE";
                    dt.Rows.Add(drow1);
                    dt.AcceptChanges();
                    ultraGrid1.DataSource = null;
                    ultraGrid1.DataSource = dt;
                    UltraGridBand band = this.ultraGrid1.DisplayLayout.Bands[0];

                    //Arrange the band's column in Group Layout style
                    this.ultraGrid1.DisplayLayout.Bands[0].RowLayoutStyle = RowLayoutStyle.GroupLayout;

                    //Enable Column/Group moving
                    this.ultraGrid1.DisplayLayout.Override.AllowRowLayoutColMoving = Infragistics.Win.Layout.GridBagLayoutAllowMoving.AllowAll;

                    //Create a group for Employees
                    UltraGridGroup empGroup = band.Groups.Add("EmpGroup", "Employee Details");

                    //Create a group for Department
                    UltraGridGroup deptGroup = band.Groups.Add("DeptGroup", "Department Details");


                    band.Columns["Salary"].RowLayoutColumnInfo.ParentGroup=null;
                    band.Columns["EmpNo"].RowLayoutColumnInfo.ParentGroup = empGroup;
                    band.Columns["EmpName"].RowLayoutColumnInfo.ParentGroup = empGroup;
                    band.Columns["DepartmentNo"].RowLayoutColumnInfo.ParentGroup = deptGroup;
                    band.Columns["DepartmentName"].RowLayoutColumnInfo.ParentGroup = deptGroup;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Row Layout Grouping Sample", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

           

            private void ultraGrid1_InitializeLayout_1(object sender, InitializeLayoutEventArgs e)
            {
                foreach (UltraGridBand band in e.Layout.Bands)
                {
                    foreach (UltraGridColumn col in band.Columns)
                    {
                      
                        switch (col.Key.ToUpper())
                        {
                            case "SALARY":
                                col.Header.Fixed = true;
                                break;
                            case "DEPTNO":
                                col.Header.VisiblePosition = 4;
                                break;
                        }
                    }
                }
            }
        }
    }

  • 469350
    Suggested Answer
    Offline posted

    You could do this using Groups and Levels. Or, you could use a GroupLayout (RowLayout), if you have the latest version of the grid.