syncfusion-winforms-grid-control
Implementing Grid Controls
Complete guide for implementing Syncfusionยฎ Windows Forms GridControl - a powerful cell-oriented grid that provides Excel-like functionality, virtual data loading, and extensive cell-level customization for .NET desktop applications.
When to Use This Skill
Use this skill when you need to:
- Implement cell-oriented grids that contain their own data
- Create virtual grids with on-demand data loading for large datasets
- Customize cells individually with GridStyleInfo and styling architecture
- Add Excel-like features (selection frames, formulas, copy/paste)
- Populate grid data using loops, PopulateValues, or QueryCellInfo
- Implement cell types (TextBox, ComboBox, CheckBox, Button, etc.)
- Enable cell editing with validation and custom handlers
- Support formulas with cell references and built-in functions
- Create covered cells or merge cells
- Implement drag and drop for columns and rows
- Handle selections (range-based or row-based)
- Export grid data to Excel, PDF, Word, CSV, or HTML
- Freeze rows/columns for better navigation
- Build spreadsheet-like interfaces in Windows Forms
GridControl Overview
The GridControl is a cell-oriented grid that maintains its own data and doesn't require binding to an external data source. It's designed for maximum flexibility and performance, supporting virtually unlimited rows and columns.
Key Capabilities:
- Cell-level customization down to individual cells
- Virtual mode for efficient handling of millions of rows
- 15+ built-in cell types with extensibility
- Excel-like formulas with cell references
- Covered cells and merged cell functionality
- Multiple selection modes (range and row-based)
- Rich editing with validation
- Drag and drop support
- Export to multiple formats
- Frozen rows and columns
- Clipboard operations (copy/paste)
- Touch support
Best Use Cases:
- Custom data layouts that don't fit table structures
- Spreadsheet-like applications
- Virtual grids with on-demand data loading
- Applications requiring cell-level control
- Grids that need formula support
- Complex cell types and custom renderers
Documentation and Navigation Guide
Getting Started
๐ Read: references/getting-started.md
- Installation and assembly deployment
- Adding GridControl through designer
- Adding GridControl through code
- Initial configuration and setup
- Required assemblies and namespaces
- Basic grid creation
Data Population
๐ Read: references/data-population.md
- Setting RowCount and ColCount
- Populating by looping through cells
- Using PopulateValues method
- Virtual grid with QueryCellInfo event
- Data binding patterns
- Performance considerations
Cell Styling Architecture
๐ Read: references/cell-style-architecture.md
- GridStyleInfo object model
- Modifying styles through designer
- Modifying styles through code
- Using ChangeCells method
- GridRangeInfo for range operations
- Appearance customization
- Style inheritance and base styles
Cell Types
๐ Read: references/cell-types.md
- Overview of 15+ cell types
- TextBox and static text
- ComboBox and dropdown lists
- CheckBox and radio buttons
- DateTimePicker and calendar
- NumericUpDown and currency
- Button and link cells
- Image cells
- Progress bar cells
- Custom cell types
- Cell type configuration
Editing and Validation
๐ Read: references/editing-validation.md
- ReadOnly property (grid and cell level)
- CurrentCellStartEditing event
- CurrentCellEditingComplete event
- Validation rules and handlers
- Custom edit behavior
- Preventing edits conditionally
- Edit mode configuration
Selection
๐ Read: references/selection.md
- Range selection with AllowSelection
- Row selection with ListBoxSelectionMode
- GridSelectionFlags enumeration
- Single vs multiple selection
- SelectionChanging event
- SelectionChanged event
- Programmatic selection
- Getting selected ranges
Excel-Like Features
๐ Read: references/excel-like-features.md
- Excel-like selection frame
- 2016 vs 2003 selection styles
- Excel-like current cell highlighting
- Keyboard navigation (arrows, Tab, Enter)
- Copy and paste support
- Clipboard operations
- Excel-like behaviors
- Selection frame customization
Formula Support
๐ Read: references/formula-support.md
- Enabling formula engine
- Formula syntax and cell references
- Built-in functions (SUM, AVERAGE, IF, etc.)
- Creating formulas in cells
- Formula calculation and dependencies
- Error handling
- Custom functions
- Formula events
Covered Ranges
๐ Read: references/covered-ranges.md
- Covering multiple cells
- CoveredRanges collection
- Adding and removing covered ranges
- Covered cells vs merged cells
- Visual appearance of covered cells
- Cell value in covered ranges
- Styling covered cells
Drag and Drop
๐ Read: references/drag-and-drop.md
- Enabling column drag and drop
- Row drag and drop support
- Touch support for drag operations
- Drag events and customization
- Restricting drag operations
- Visual feedback during drag
Scrolling and Zooming
๐ Read: references/scrolling-zooming.md
- Scroll bar configuration
- Frozen rows and columns
- Zoom functionality
- Scroll events
- Smooth scrolling
- Performance optimization for scrolling
- Virtual scrolling
Exporting
๐ Read: references/exporting.md
- Export to Excel (XLS, XLSX)
- Export to PDF
- Export to Word documents
- Export to CSV format
- Export to HTML
- Export options and customization
- Styling exported content
- Range-based export
Quick Start Example
Basic GridControl Setup
using Syncfusion.Windows.Forms.Grid;
using System.Drawing;
using System.Windows.Forms;
public partial class Form1 : Form
{
private GridControl gridControl1;
public Form1()
{
InitializeComponent();
InitializeGrid();
}
private void InitializeGrid()
{
// Create and configure GridControl
gridControl1 = new GridControl();
gridControl1.Size = new Size(800, 600);
gridControl1.Dock = DockStyle.Fill;
// Set dimensions
gridControl1.RowCount = 50;
gridControl1.ColCount = 10;
// Populate with data
for (int row = 1; row <= gridControl1.RowCount; row++)
{
for (int col = 1; col <= gridControl1.ColCount; col++)
{
gridControl1[row, col].CellValue = $"R{row}C{col}";
}
}
// Style header row
GridStyleInfo headerStyle = new GridStyleInfo();
headerStyle.BackColor = Color.DarkBlue;
headerStyle.TextColor = Color.White;
headerStyle.Font.Bold = true;
gridControl1.ChangeCells(GridRangeInfo.Row(1), headerStyle);
// Enable Excel-like features
gridControl1.ExcelLikeSelectionFrame = true;
gridControl1.ExcelLikeCurrentCell = true;
gridControl1.AllowSelection = GridSelectionFlags.Any;
// Add to form
this.Controls.Add(gridControl1);
}
}
Common Patterns
Pattern 1: Virtual Grid
gridControl1.Model.RowCount = 1000000;
gridControl1.QueryCellInfo += (sender, e) =>
{
e.Style.CellValue = GetData(e.RowIndex, e.ColIndex);
};
๐ Details: references/data-population.md
Pattern 2: Cell Styling
GridStyleInfo style = new GridStyleInfo { BackColor = Color.LightGreen };
gridControl1.ChangeCells(GridRangeInfo.Cells(5, 2, 8, 5), style);
๐ Details: references/cell-style-architecture.md
Pattern 3: Formulas
gridControl1.Model.EnableFormulas = true;
gridControl1[5, 1].CellValue = "=SUM(A1:A4)";
๐ Details: references/formula-support.md
Pattern 4: Cell Types
gridControl1[3, 2].CellType = GridCellTypeName.ComboBox;
gridControl1[3, 2].ChoiceList = new string[] { "Option 1", "Option 2" };
๐ Details: references/cell-types.md
Pattern 5: Selection
gridControl1.AllowSelection = GridSelectionFlags.Any;
gridControl1.SelectionChanged += (s, e) => { /* Handle selection */ };
๐ Details: references/selection.md
Key Properties
Essential Properties
| Property | Type | Description |
|---|---|---|
RowCount |
int | Number of rows in the grid |
ColCount |
int | Number of columns in the grid |
Model[row, col] |
GridStyleInfo | Access cell style and properties |
AllowSelection |
GridSelectionFlags | Enable/configure range selection |
ListBoxSelectionMode |
SelectionMode | Enable/configure row selection |
ReadOnly |
bool | Enable/disable editing for entire grid |
ExcelLikeSelectionFrame |
bool | Show Excel-style selection frame |
ExcelLikeCurrentCell |
bool | Highlight current cell like Excel |
CoveredRanges |
GridRangeInfoList | Collection of covered cell ranges |
GridStyleInfo Properties
| Property | Type | Description |
|---|---|---|
CellValue |
object | Value displayed in the cell |
CellType |
string | Cell type (TextBox, ComboBox, etc.) |
BackColor |
Color | Background color |
TextColor |
Color | Text color |
Font |
GridFontInfo | Font settings |
ReadOnly |
bool | Enable/disable editing for cell |
Format |
string | Display format string |
HorizontalAlignment |
GridHorizontalAlignment | Text horizontal alignment |
VerticalAlignment |
GridVerticalAlignment | Text vertical alignment |
Common Use Cases
- Spreadsheet Application - Excel-like interface with formulas and formatting
- Data Entry Form - Custom forms with various cell types
- Report Viewer - Formatted reports with merged cells and export
- Virtual Data Grid - Millions of rows with on-demand loading
- Dashboard Grid - Custom layouts with visual indicators
- Configuration Editor - Property grids with specialized cell types
Troubleshooting
Performance Issues: Use virtual mode (QueryCellInfo), BeginUpdate/EndUpdate for batch operations
Selection Not Working: Check AllowSelection property, verify grid has focus
Formulas Not Calculating: Ensure Model.EnableFormulas = true, validate syntax
Cell Values Not Showing: Verify CellValue set, check for covered cells, validate row/column indices (1-based)
For detailed troubleshooting, see the relevant reference files in the Navigation Guide.