Click here to Skip to main content
15,893,161 members
Articles / Programming Languages / C#
Article

C# Grid

Rate me:
Please Sign up or sign in to vote.
3.60/5 (36 votes)
11 Dec 2003 280.7K   3.5K   69   39
An implementation of a grid in C#

Image 1

Introduction

Before we begin, this grid is in it's infancy and I hope with collaboration from other CodeProject members we can make this grid as functional as the one you would find in Microsoft Excel, in respect of that I've kept the article content to a minimum, expect it grow in the coming months.

Expect bugs and lack of functionality these items will be addressed in future releases.

What's missing:

  • Image alignment in cells
  • Limited events
  • Specialized Cells
  • A whole raft of other stuff

If you would like to contribute to this project, email me using the discussion thread below. I'm looking really for 2 other people who would have good GUI and design skills.

Design

The grid is primary to be used as a control and could be optionally used a straight class. Lets take a look at a simplistic class design.

Image 2

I've excluded properties and methods here, these will be documented at a later stage.

Example of use

C#
virtual public void Demo()
{

    gridCtrl.LockUpdates = true;

    for (int r=0; r < 30; r++)
    gridCtrl.AddRow();

    for (int c=0; c < 30; c++)
        gridCtrl.AddColumn();

    int ii=0;

    int i=255;
    for (int r=1;r < gridCtrl.rowList.Count;r++)
    {
        i = 255;
        for (int c=1;c < gridCtrl.colList.Count;c++)
        {
            gridCtrl.GetCell(r,c).Value = ii++;
            gridCtrl.GetCell(r,c).BackColor = Color.FromArgb(i,i,255);;
            i-=5;
        }
    }

    gridCtrl.SetFixedRowCount(1);
    gridCtrl.SetFixedColumnCount(1);


    gridCtrl.GetRow(2).Size = 40;
    gridCtrl.GetColumn(1).Size = 180; 
    gridCtrl.GetRow(8).Visible = false;

    gridCtrl.GetRow(17).Size = 40;

    gridCtrl.GetCell(1,4).BackColor = Color.Cornsilk;
    gridCtrl.GetCell(2,4).BackColor = Color.CornflowerBlue;
    gridCtrl.GetCell(3,4).BackColor = Color.Coral;
    gridCtrl.GetCell(4,4).BackColor = Color.CadetBlue;

    gridCtrl.GetCell(1,1).HorizontalAlignment = 
      Cell.HorizontalAlignmentType.Left;
    gridCtrl.GetCell(1,1).Value = "Left";
    gridCtrl.GetCell(1,1).TextColor = Color.Blue;
    gridCtrl.GetCell(1,1).FontName = "System";

    gridCtrl.GetCell(2,1).HorizontalAlignment = 
      Cell.HorizontalAlignmentType.Center;
    gridCtrl.GetCell(2,1).Value = "Center";
    gridCtrl.GetCell(3,1).HorizontalAlignment =
      Cell.HorizontalAlignmentType.Right;
    gridCtrl.GetCell(3,1).Value = "Right";

    gridCtrl.GetCell(4,1).VerticalAlignment = 
      Cell.VerticalAlignmentType.Top;
    gridCtrl.GetCell(4,1).Value = "Top";
    gridCtrl.GetCell(5,1).VerticalAlignment = 
      Cell.VerticalAlignmentType.Center;
    gridCtrl.GetCell(5,1).Value = "Center";
    gridCtrl.GetCell(6,1).VerticalAlignment = 
      Cell.VerticalAlignmentType.Bottom;
    gridCtrl.GetCell(6,1).Value = "Bottom";

    gridCtrl.GetCell(2,2).FontStyle = FontStyle.Bold;
    gridCtrl.GetCell(2,3).FontStyle = FontStyle.Italic;
    gridCtrl.GetCell(2,4).FontStyle = FontStyle.Underline;
    
    gridCtrl.GetCell(12,12).TipText = "Cell";


    Cell cell = gridCtrl.GetCell(7,1);
    cell.TextColor = Color.Yellow;
    cell.BackColor = Color.Black;
    cell.Value = "Funny";



    gridCtrl.GetRow(4).CanResize = false;
    gridCtrl.GetColumn(4).CanResize = false;


    gridCtrl.GetCell(9,1).FontName = "Wingdings";
    
    gridCtrl.GetCell(17,1).Image = new Bitmap(GetType(), "image1.bmp");

    gridCtrl.LockUpdates = false;
    gridCtrl.AdjustScrollbars();
    Invalidate();
}

History

  • 1.0 - 12 September 2003 - Initial Release.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Software Developer (Senior) Software Kinetics
United Kingdom United Kingdom




Software Kinetics
are experts in developing customised and bespoke applications and have expertise in the development of desktop, mobile and internet applications on Windows.


We specialise in:

  • User Interface Design
  • Desktop Development
  • Windows Phone Development
  • Windows Presentation Framework
  • Windows Forms
  • Windows Communication Framework
  • Windows Services
  • Network Applications
  • Database Applications
  • Web Development
  • Web Services
  • Silverlight
  • ASP.net


Visit Software Kinetics

Comments and Discussions

 
Praisethis is what I am looking for Pin
Southmountain14-Jan-23 10:31
Southmountain14-Jan-23 10:31 
Bugi got a bug Pin
pclion22-Feb-15 22:23
pclion22-Feb-15 22:23 
GeneralMy vote of 5 Pin
r_pippi22-Mar-11 5:01
r_pippi22-Mar-11 5:01 
GeneralMy vote of 1 Pin
Ryleigh27-Mar-09 7:40
Ryleigh27-Mar-09 7:40 
GeneralRe: My vote of 1 Pin
NormDroid20-May-09 4:43
professionalNormDroid20-May-09 4:43 
Questionchange name of headers Pin
amrsoft12324-Mar-09 23:57
amrsoft12324-Mar-09 23:57 
Generalhardcoded paths Pin
Ken Mazaika26-Sep-07 5:00
Ken Mazaika26-Sep-07 5:00 
Generalsmall bug Pin
Pramod Sivanandan26-Dec-06 23:21
Pramod Sivanandan26-Dec-06 23:21 
GeneralDisplaying data in grid Pin
Member 104235915-Jul-04 8:25
Member 104235915-Jul-04 8:25 
GeneralRe: Displaying data in grid Pin
Tim Kohler15-Jul-04 8:54
Tim Kohler15-Jul-04 8:54 
GeneralRe: Displaying data in grid Pin
Mike Osbahr15-Jul-04 9:37
Mike Osbahr15-Jul-04 9:37 
GeneralTextHeight Property Pin
andyj18329-Jun-04 3:49
andyj18329-Jun-04 3:49 
GeneralRe: TextHeight Property Pin
NormDroid22-Jun-04 4:21
professionalNormDroid22-Jun-04 4:21 
GeneralVirtual Grid Architecture Pin
Anonymous9-Jan-04 5:42
Anonymous9-Jan-04 5:42 
GeneralRe: Virtual Grid Architecture Pin
NormDroid12-Mar-04 0:19
professionalNormDroid12-Mar-04 0:19 
QuestionHow to Make it Redraw a Cell Pin
Sudhir Bhat31-Dec-03 2:04
Sudhir Bhat31-Dec-03 2:04 
AnswerRe: How to Make it Redraw a Cell Pin
NormDroid31-Dec-03 5:39
professionalNormDroid31-Dec-03 5:39 
No it should only invalidate the area in which the cell is contained, I will fix for 1.1

I am that is


Generaluser control Pin
navyC527-Dec-03 12:48
navyC527-Dec-03 12:48 
GeneralRe: user control Pin
Anonymous30-Dec-03 14:07
Anonymous30-Dec-03 14:07 
QuestionHow to modify the header ? Pin
Thierry Parent16-Dec-03 1:32
Thierry Parent16-Dec-03 1:32 
AnswerRe: How to modify the header ? Pin
NormDroid25-Dec-03 1:56
professionalNormDroid25-Dec-03 1:56 
QuestionRe: How to modify the header ? Pin
amrsoft12324-Mar-09 23:57
amrsoft12324-Mar-09 23:57 
GeneralRightToLeft Pin
Anonymous15-Dec-03 20:30
Anonymous15-Dec-03 20:30 
GeneralWinForms DataGrid Sort Indicator Pin
kkaps15-Dec-03 11:10
kkaps15-Dec-03 11:10 
Generalsuggestion: complex headers Pin
bluemiracoli15-Dec-03 3:47
bluemiracoli15-Dec-03 3:47 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.