Solved

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

Posted on 2008-10-15
10
676 Views
Last Modified: 2013-12-17
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
0
Comment
Question by:asp316
  • 5
  • 4
10 Comments
 
LVL 7

Expert Comment

by:the_bachelor
Comment Utility
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
 

Author Comment

by:asp316
Comment Utility
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
 
LVL 7

Expert Comment

by:keustermans
Comment Utility
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
 

Author Comment

by:asp316
Comment Utility
That works PERFECTLY! My only question is how do I do the 'Include' checkboxes?
0
 
LVL 7

Expert Comment

by:keustermans
Comment Utility
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
6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

 

Author Comment

by:asp316
Comment Utility
It does. It shows true or false. But how do I insert the checkbox control and bind it to the dataset value?
0
 
LVL 7

Expert Comment

by:keustermans
Comment Utility
Hmmm, let me think about that one.
0
 
LVL 7

Accepted Solution

by:
keustermans earned 500 total points
Comment Utility
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
 
LVL 7

Expert Comment

by:keustermans
Comment Utility
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
 

Author Closing Comment

by:asp316
Comment Utility
VERY NICE!
0

Featured Post

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
This tutorial demonstrates a quick way of adding group price to multiple Magento products.
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now