Is there a way to display a datagridview in columnar format?

I have a c# winform application that will return a recordset of calculated prices certain categories of vehicles. I want to display each row in a columnar format (I've attached a gif that is a mockup of what I'm after)

Is there a relatively easy way to do this?
column-format.gif
asp316Asked:
Who is Participating?
 
keustermansCommented:
Here we go.  Put the code below in a function or were ever you do the conversion and you will have the result you want.
 //DataSet switchMe=Fill dataset here
            DataSet ds = MakeDataSetVerticalDataSet(switchMe)
            vertDataGrid.DataSource = null;
            DataGridViewRow newCBrow = new DataGridViewRow();
            try
            {
                int countColumns = 0;
                foreach (DataColumn col in ds.Tables[0].Columns)
                {
                    if (countColumns > 0)
                    {
                        newCBrow.Cells.Add(new DataGridViewCheckBoxCell());
                        DataGridViewCheckBoxColumn dgcol = new DataGridViewCheckBoxColumn();
 
                        dgcol.HeaderText = "Include in Quote";
 
                        vertDataGrid.Columns.Add(dgcol);
                    }
                    else
                    {
                        newCBrow.Cells.Add(new DataGridViewTextBoxCell());
                        DataGridViewTextBoxColumn dgcol = new DataGridViewTextBoxColumn();
 
                        dgcol.HeaderText = "";
 
                        vertDataGrid.Columns.Add(dgcol);
 
                    }
                    countColumns+=1;
 
                }
           
                vertDataGrid.Rows.Add(newCBrow); 
            }
            catch(Exception)
            {
            }
            try
            {
                foreach (DataRow row in ds.Tables[0].Rows)
                {
                    DataGridViewRow newrow = new DataGridViewRow();
                    for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
                    {
                        DataGridViewTextBoxCell dgt = new DataGridViewTextBoxCell();
                        dgt.Value = row[i].ToString();
                        newrow.Cells.Add(dgt);
                    }
                    vertDataGrid.Rows.Add(newrow);
 
                }
            }
            catch (Exception) { }

Open in new window

0
 
the_bachelorCommented:
You sould be able to do that.
This is how I envision it.
You write a Stored procedure that spits a Resultset with the following columns
Category | 40 | 45 | Super Coach | Sleeper

For the Include checkboxes, you should be able to get thos done by using a gridview footer (wich will put the at the bottow)
I'm unsure if you can use Headers for that....
0
 
asp316Author Commented:
I don't know how many columns there will be. That's a user definable property of this app.

The datagridview will still display them in a row style of format.
0
Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

 
keustermansCommented:
Here is some code that will cahange a dataset from horizontal to vertical orientation.

Once you are done you need to make the headers invisible and (Bob's your uncle) the datset has been changed to vertical orientation and it reflects in the datagrid that way.

You need to rember to make the columnheaders invisible as they will have bogus column names.

public DataSet MakeDataSetVerticalDataSet(DataSet switchMe)
{
    DataSet ds = new DataSet();
    foreach(DataTable dt in switchMe.Tables)
    {
        DataTable tempTable = new DataTable();
        for(int i=0; i<=dt.Rows.Count; i++)
        {
            tempTable.Columns.Add(Convert.ToString(i));
        }
        DataRow r;
        for(int k=0; k<dt.Columns.Count; k++)
        {
            r = tempTable.NewRow();
            r[0] = dt.Columns[k].ToString();
            for(int j=1; j<=dt.Rows.Count; j++)
                r[j] = dt.Rows[j-1][k];
        }
        tempTable.Rows.Add(r);
    }
    ds.Tables.Add(tempTable);
}
return ds;
}

Open in new window

0
 
asp316Author Commented:
That works PERFECTLY! My only question is how do I do the 'Include' checkboxes?
0
 
keustermansCommented:
As far as I can see you need to include the checkboxe default values  as a row in your original dataset, after switching it you should have the result you require.
0
 
asp316Author Commented:
It does. It shows true or false. But how do I insert the checkbox control and bind it to the dataset value?
0
 
keustermansCommented:
Hmmm, let me think about that one.
0
 
keustermansCommented:
I have to say that it is not the most elegant way of doing this.  You could override the way the datagrid gets painted but that is a hell of a lot of more work for the same result.
0
 
asp316Author Commented:
VERY NICE!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.