The DataGridView control in Windows Forms is an essential component for presenting and editing data in tabular form. This guide covers all aspects of DataGridView
, including basic setup, data binding, customization, key events, sorting, filtering, and performance optimization. Whether you’re a beginner or an advanced user, this guide will help you effectively use DataGridView
in your .NET applications.
Table of Contents
- Introduction to DataGridView
- Setting Up a Basic DataGridView
- Data Binding and Unbound Mode
- Customizing the DataGridView
- Handling Events in DataGridView
- Key Events and Examples for DataGridView
- Sorting and Filtering Data
- Editing and Validating Cells
- Adding Custom Columns and Controls
- Working with Data Programmatically
- Performance Optimization Tips
- Common DataGridView Scenarios and Examples
1. Introduction to DataGridView
The DataGridView
control in Windows Forms offers a flexible way to present data in a grid format, similar to a spreadsheet. This control is widely used to manage and edit data interactively, making it perfect for database-driven applications.
2. Setting Up a Basic DataGridView
To start using DataGridView
, drag and drop it onto your form in the designer or create it programmatically.
DataGridView dataGridView = new DataGridView();
dataGridView.Dock = DockStyle.Fill;
this.Controls.Add(dataGridView);
Set properties like AutoGenerateColumns
and ReadOnly
to control how data is displayed and edited in the grid.
3. Data Binding and Unbound Mode
The DataGridView
can operate in two modes:
- Bound Mode: Bind it to data sources like
DataTable
,List<T>
, orBindingSource
. - Unbound Mode: Manually populate data, useful for smaller or custom datasets.
4. Customizing the DataGridView
Customize columns, rows, and headers with various properties. Set specific column types like TextBoxColumn
, CheckBoxColumn
, and ComboBoxColumn
, and style the grid with CellStyle
and ColumnHeadersDefaultCellStyle
.
5. Handling Events in DataGridView
DataGridView
events provide control over user interactions, making it possible to react to cell clicks, edits, mouse movements, and keyboard inputs. Below is a list of key events with examples for each.
6. Key Events and Examples for DataGridView
Cell Events
- CellClick: Triggered when a cell is clicked.
private void dataGridView_CellClick(object sender, DataGridViewCellEventArgs e) {
MessageBox.Show($"Cell clicked at row {e.RowIndex}, column {e.ColumnIndex}");
}
- CellDoubleClick: Fired when a cell is double-clicked, often used to delete a row.
private void dataGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e) {
dataGridView.Rows.RemoveAt(e.RowIndex);
}
- CellValueChanged: Invoked after a cell value is modified.
private void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e) {
MessageBox.Show("Cell value changed!");
}
- CellFormatting: Allows conditional formatting of cells.
private void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
if (dataGridView.Columns[e.ColumnIndex].Name == "Status" && e.Value.ToString() == "Inactive") {
e.CellStyle.BackColor = Color.Gray;
}
}
Row Events
- RowEnter: Occurs when a row gains focus.
private void dataGridView_RowEnter(object sender, DataGridViewCellEventArgs e) {
MessageBox.Show($"Entered row {e.RowIndex}");
}
- RowLeave: Fires when focus leaves a row.
private void dataGridView_RowLeave(object sender, DataGridViewCellEventArgs e) {
MessageBox.Show($"Left row {e.RowIndex}");
}
Column Events
- ColumnHeaderMouseClick: Fires when a column header is clicked, often used for sorting.
private void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
MessageBox.Show($"Column header clicked for column {e.ColumnIndex}");
}
Editing Events
- CellBeginEdit: Invoked when a cell enters edit mode.
private void dataGridView_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) {
MessageBox.Show("Editing started.");
}
- CellValidating: Used to validate cell content before committing changes.
private void dataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) {
if (dataGridView.Columns[e.ColumnIndex].Name == "Age" && !int.TryParse(e.FormattedValue.ToString(), out _)) {
e.Cancel = true;
MessageBox.Show("Please enter a valid number.");
}
}
Mouse and Keyboard Events
- MouseClick: Fires when the grid is clicked.
private void dataGridView_MouseClick(object sender, MouseEventArgs e) {
MessageBox.Show("Grid clicked!");
}
- KeyDown: Captures key presses.
private void dataGridView_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyCode == Keys.Delete && dataGridView.SelectedRows.Count > 0) {
dataGridView.Rows.RemoveAt(dataGridView.SelectedRows[0].Index);
}
}
7. Sorting and Filtering Data
Sorting data in the DataGridView
can be done by enabling the SortMode
property or handling the ColumnHeaderMouseClick
event for custom sorting.
8. Editing and Validating Cells
To enforce validation, use the CellValidating
event. Set CancelEdit
to revert invalid changes.
9. Adding Custom Columns and Controls
Add custom columns by manually adding them in code. Examples include CheckBoxColumn
or custom-drawn cells.
10. Working with Data Programmatically
You can programmatically add, remove, and update rows and cells using methods like Rows.Add()
, Rows.RemoveAt()
, and Rows.Clear()
.
11. Performance Optimization Tips
For large datasets, consider setting VirtualMode
to true
and implementing your own data management to avoid performance bottlenecks.
12. Common DataGridView Scenarios and Examples
Common tasks include selecting rows based on certain criteria, handling keyboard navigation, and exporting data to external formats.