Loading...
Loading...
Implements Syncfusion WinForms SfDataGrid component for displaying and managing tabular data in Windows Forms applications. Use this when working with data grids, column management (auto-generation, stacked headers), data operations (filtering, sorting, grouping), or grid editing with validation. The skill covers data summaries, selection modes, export capabilities (Excel/PDF), conditional styling, master-detail views, and drag-and-drop functionality.
npx skill4agent add syncfusion/winforms-ui-components-skills syncfusion-winforms-datagridSyncfusion.SfDataGrid.WinFormsSyncfusion.SfDataGrid.WinFormsInstall-Package Syncfusion.SfDataGrid.WinFormsdotnet add package Syncfusion.SfDataGrid.WinFormspackages.config<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Syncfusion.SfDataGrid.WinForms" version="27.1.57" targetFramework="net481" />
</packages>Syncfusion.SfDataGrid.WinFormsC:\Program Files (x86)\Syncfusion\Essential Studio\Windows\<version>\Assemblies\4.0\using System;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
static class Program
{
[STAThread]
static void Main()
{
// Register Syncfusion license key BEFORE any Syncfusion control is created
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR_LICENSE_KEY");
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}using System;
using System.Windows.Forms;
using Syncfusion.WinForms.DataGrid;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private SfDataGrid sfDataGrid1;
public Form1()
{
InitializeComponent();
// Create SfDataGrid instance
sfDataGrid1 = new SfDataGrid();
// Set position and size
sfDataGrid1.Location = new System.Drawing.Point(12, 12);
sfDataGrid1.Size = new System.Drawing.Size(760, 438);
// Or use Dock to fill the entire form
sfDataGrid1.Dock = DockStyle.Fill;
// Add to form's controls collection
this.Controls.Add(sfDataGrid1);
}
}
}using System;
using System.Collections.ObjectModel;
public class OrderInfo
{
public int OrderID { get; set; }
public string CustomerID { get; set; }
public string CustomerName { get; set; }
public string Country { get; set; }
public string ShipCity { get; set; }
public OrderInfo(int orderId, string customerName, string country, string customerId, string shipCity)
{
this.OrderID = orderId;
this.CustomerName = customerName;
this.Country = country;
this.CustomerID = customerId;
this.ShipCity = shipCity;
}
}
public class OrderInfoCollection
{
private ObservableCollection<OrderInfo> _orders;
public ObservableCollection<OrderInfo> Orders
{
get { return _orders; }
set { _orders = value; }
}
public OrderInfoCollection()
{
_orders = new ObservableCollection<OrderInfo>();
GenerateOrders();
}
private void GenerateOrders()
{
_orders.Add(new OrderInfo(1001, "Maria Anders", "Germany", "ALFKI", "Berlin"));
_orders.Add(new OrderInfo(1002, "Ana Trujilo", "Mexico", "ANATR", "Mexico D.F."));
_orders.Add(new OrderInfo(1003, "Antonio Moreno", "Mexico", "ANTON", "Mexico D.F."));
_orders.Add(new OrderInfo(1004, "Thomas Hardy", "UK", "AROUT", "London"));
_orders.Add(new OrderInfo(1005, "Christina Berglund", "Sweden", "BERGS", "Lula"));
_orders.Add(new OrderInfo(1006, "Hanna Moos", "Germany", "BLAUS", "Mannheim"));
_orders.Add(new OrderInfo(1007, "Frederique Citeaux", "France", "BLONP", "Strasbourg"));
_orders.Add(new OrderInfo(1008, "Martin Sommer", "Spain", "BOLID", "Madrid"));
_orders.Add(new OrderInfo(1009, "Laurence Lebihan", "France", "BONAP", "Marseille"));
_orders.Add(new OrderInfo(1010, "Elizabeth Lincoln", "Canada", "BOTTM", "Tsawassen"));
}
}using System;
using System.Windows.Forms;
using Syncfusion.WinForms.DataGrid;
using Syncfusion.WinForms.DataGrid.Enums;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private SfDataGrid sfDataGrid1;
public Form1()
{
InitializeComponent();
InitializeDataGrid();
}
private void InitializeDataGrid()
{
// Create DataGrid instance
sfDataGrid1 = new SfDataGrid();
sfDataGrid1.Dock = DockStyle.Fill;
// Create and bind data source
OrderInfoCollection collection = new OrderInfoCollection();
sfDataGrid1.DataSource = collection.Orders;
// Enable features
sfDataGrid1.AllowEditing = true;
sfDataGrid1.AllowFiltering = true;
sfDataGrid1.AllowSorting = true;
sfDataGrid1.AllowGrouping = true;
sfDataGrid1.ShowGroupDropArea = true;
// Configure selection
sfDataGrid1.SelectionMode = GridSelectionMode.Extended;
// Auto-generate columns from data model
sfDataGrid1.AutoGenerateColumns = true;
// Add to form
this.Controls.Add(sfDataGrid1);
}
}
}private void InitializeDataGrid()
{
sfDataGrid1 = new SfDataGrid();
sfDataGrid1.Dock = DockStyle.Fill;
// Disable auto-generation to define columns manually
sfDataGrid1.AutoGenerateColumns = false;
// Add columns with specific properties
sfDataGrid1.Columns.Add(new GridTextColumn()
{
MappingName = "OrderID",
HeaderText = "Order ID",
Width = 100,
AllowEditing = false // Make this column read-only
});
sfDataGrid1.Columns.Add(new GridTextColumn()
{
MappingName = "CustomerID",
HeaderText = "Customer ID",
Width = 120
});
sfDataGrid1.Columns.Add(new GridTextColumn()
{
MappingName = "CustomerName",
HeaderText = "Customer Name",
Width = 150
});
sfDataGrid1.Columns.Add(new GridTextColumn()
{
MappingName = "Country",
HeaderText = "Country",
Width = 120
});
sfDataGrid1.Columns.Add(new GridTextColumn()
{
MappingName = "ShipCity",
HeaderText = "Ship City",
Width = 120
});
// Bind data source
OrderInfoCollection collection = new OrderInfoCollection();
sfDataGrid1.DataSource = collection.Orders;
// Enable features
sfDataGrid1.AllowSorting = true;
sfDataGrid1.AllowFiltering = true;
sfDataGrid1.AllowGrouping = true;
sfDataGrid1.ShowGroupDropArea = true;
// Add to form
this.Controls.Add(sfDataGrid1);
}// Bind to ObservableCollection (recommended for automatic UI updates)
ObservableCollection<OrderInfo> orders = new ObservableCollection<OrderInfo>();
sfDataGrid1.DataSource = orders;
// Bind to List
List<OrderInfo> orderList = new List<OrderInfo>();
sfDataGrid1.DataSource = orderList;
// Bind to DataTable
DataTable dataTable = new DataTable();
sfDataGrid1.DataSource = dataTable;
// Bind to BindingList
BindingList<OrderInfo> bindingList = new BindingList<OrderInfo>();
sfDataGrid1.DataSource = bindingList;// Sort by single column ascending
sfDataGrid1.SortColumnDescriptions.Add(new SortColumnDescription()
{
ColumnName = "Country",
SortDirection = ListSortDirection.Ascending
});
// Sort by multiple columns
sfDataGrid1.SortColumnDescriptions.Add(new SortColumnDescription()
{
ColumnName = "Country",
SortDirection = ListSortDirection.Ascending
});
sfDataGrid1.SortColumnDescriptions.Add(new SortColumnDescription()
{
ColumnName = "CustomerName",
SortDirection = ListSortDirection.Descending
});
// Clear all sorting
sfDataGrid1.SortColumnDescriptions.Clear();// Group by single column
sfDataGrid1.GroupColumnDescriptions.Add(new GroupColumnDescription()
{
ColumnName = "Country"
});
// Group by multiple levels
sfDataGrid1.GroupColumnDescriptions.Add(new GroupColumnDescription()
{
ColumnName = "Country"
});
sfDataGrid1.GroupColumnDescriptions.Add(new GroupColumnDescription()
{
ColumnName = "ShipCity"
});
// Expand/collapse all groups
sfDataGrid1.ExpandAllGroup();
sfDataGrid1.CollapseAllGroup();
// Clear all grouping
sfDataGrid1.GroupColumnDescriptions.Clear();// Filter with single condition
sfDataGrid1.Columns["CustomerID"].FilterPredicates.Add(new FilterPredicate()
{
FilterType = FilterType.Equals,
FilterValue = "ALFKI"
});
// Filter with multiple OR conditions
sfDataGrid1.Columns["Country"].FilterPredicates.Add(new FilterPredicate()
{
FilterType = FilterType.Equals,
FilterValue = "Mexico",
PredicateType = PredicateType.Or
});
sfDataGrid1.Columns["Country"].FilterPredicates.Add(new FilterPredicate()
{
FilterType = FilterType.Equals,
FilterValue = "Germany",
PredicateType = PredicateType.Or
});
// Clear filter for specific column
sfDataGrid1.Columns["Country"].FilterPredicates.Clear();
// Clear all filters
foreach (var column in sfDataGrid1.Columns)
{
column.FilterPredicates.Clear();
}// Handle selection changed
sfDataGrid1.SelectionChanged += (sender, e) =>
{
if (sfDataGrid1.SelectedItem != null)
{
var selectedOrder = sfDataGrid1.SelectedItem as OrderInfo;
Console.WriteLine($"Selected: {selectedOrder.CustomerName}");
}
};
// Handle cell value changed
sfDataGrid1.CurrentCellValueChanged += (sender, e) =>
{
var rowData = sfDataGrid1.GetRecordAtRowIndex(e.RowColumnIndex.RowIndex);
Console.WriteLine($"Cell value changed in row: {e.RowColumnIndex.RowIndex}");
};sfDataGrid.AutoGenerateColumns = false;
// Add columns
sfDataGrid.Columns.Add(new GridTextColumn()
{
MappingName = "OrderID",
HeaderText = "Order ID",
AllowEditing = false
});
sfDataGrid.Columns.Add(new GridNumericColumn()
{
MappingName = "Quantity",
HeaderText = "Qty"
});
// Configure selection
sfDataGrid.SelectionMode = GridSelectionMode.Multiple;
sfDataGrid.SelectionUnit = GridSelectionUnit.Row;// Enable UI features
sfDataGrid.AllowFiltering = true;
sfDataGrid.AllowSorting = true;
sfDataGrid.AllowGrouping = true;
sfDataGrid.ShowGroupDropArea = true;
// Programmatic operations
sfDataGrid.Columns["CustomerID"].FilterPredicates.Add(
new FilterPredicate() { FilterType = FilterType.Equals, FilterValue = "FRANS" });
sfDataGrid.SortColumnDescriptions.Add(
new SortColumnDescription() { ColumnName = "OrderDate", SortDirection = ListSortDirection.Descending });
sfDataGrid.GroupColumnDescriptions.Add(
new GroupColumnDescription() { ColumnName = "Country" });sfDataGrid.DrawCell += (sender, e) =>
{
if (e.DataRow.RowType == RowType.DefaultRow && e.Column.MappingName == "Quantity")
{
var quantity = Convert.ToInt32(e.DisplayText);
if (quantity < 10)
{
e.Style.BackColor = Color.LightCoral;
e.Style.TextColor = Color.White;
}
else if (quantity > 50)
{
e.Style.BackColor = Color.LightGreen;
}
}
};using Syncfusion.WinForms.DataGridConverter;
var options = new DataGridExcelExportOptions();
options.ExportMode = ExportMode.Value;
options.ExcludeColumns = new List<string> { "InternalID" };
var excelEngine = sfDataGrid.ExportToExcel(sfDataGrid.View, options);
var workbook = excelEngine.Excel.Workbooks[0];
workbook.SaveAs("GridData.xlsx");// Add group summary
var groupSummary = new GridSummaryRow();
groupSummary.ShowSummaryInRow = false;
groupSummary.SummaryColumns.Add(new GridSummaryColumn()
{
Name = "TotalQuantity",
MappingName = "Quantity",
SummaryType = SummaryType.Int32Aggregate,
Format = "Total: {Sum}",
});
sfDataGrid.GroupSummaryRows.Add(groupSummary);
// Add table summary
var tableSummary = new GridTableSummaryRow();
tableSummary.ShowSummaryInRow = false;
tableSummary.Position = TableSummaryRowPosition.Bottom;
tableSummary.SummaryColumns.Add(new GridSummaryColumn()
{
Name = "GrandTotal",
MappingName = "UnitPrice",
SummaryType = SummaryType.DoubleAggregate,
Format = "Grand Total: ${Sum:C}",
});
sfDataGrid.TableSummaryRows.Add(tableSummary);DataSourceAutoGenerateColumnsAllowEditingAllowFilteringAllowSortingAllowGroupingAllowDraggingColumnsAllowDraggingRowsSelectionModeSelectionUnitSelectedItemSelectedItemsHeaderRowHeightRowHeightStyleShowGroupDropAreaShowRowHeader