Skip to main content

syncfusion-winforms-listview

Guide for implementing Syncfusion SfListView control in Windows Forms for creating list-based UIs with data binding, grouping, sorting, filtering, and selection capabilities. Use when building applications with item collections, Explorer views, contact lists, or product catalogs with sortable/filterable lists. Covers data binding, checkbox lists, grouped lists, filtered lists, and rich data display for list interfaces.

Source facts

Repository
syncfusion/winforms-ui-components-skills
Last source activity
July 6, 2026 at 07:19
Detected SKILL.md language
English
Stars
2
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
9 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
syncfusion-winforms-listview
description
Guide for implementing Syncfusion SfListView control in Windows Forms for creating list-based UIs with data binding, grouping, sorting, filtering, and selection capabilities. Use when building applications with item collections, Explorer views, contact lists, or product catalogs with sortable/filterable lists. Covers data binding, checkbox lists, grouped lists, filtered lists, and rich data display for list interfaces.
metadata
{"author":"Syncfusion Inc","version":"34.1.29"}
# Implementing ListView Guide for implementing Syncfusion® Windows Forms ListView (SfListView) — a high-performance list control for creating rich list-based user interfaces with data binding, grouping, sorting, filtering, selection modes, checkbox selection, and extensive customization options. ## When to Use This Skill Use this skill when you need to: - **Create list views** with data binding to collections in Windows Forms applications - **Display item collections** with grouping, sorting, and filtering capabilities - **Implement item selection** with single or multiple selection modes - **Add checkbox selection** for multi-item operations - **Build searchable lists** with filtering and sorting - **Create grouped lists** with expandable/collapsible groups - **Customize item appearance** with templates, styles, and themes - **Support accessibility** with UIAutomation and keyboard navigation - **Build data-driven UIs** similar to file explorers, contact lists, or product catalogs - **Handle large datasets** with optimized view recycling This skill covers complete ListView implementation including setup, data binding, selection, data operations, customization, and advanced features. ## Component Overview The **SfListView** control is a high-performance list view control that provides: - **Data Binding** - Support for IEnumerable data sources with automatic refresh - **Selection Modes** - Single, multiple, or none with events - **Checkbox Selection** - Multi-select with checkbox, select all, recursive checking - **Grouping** - Organize items by property with expandable groups - **Sorting** - Ascending/descending sort with custom comparers - **Filtering** - Filter items by criteria with live updates - **Item Sizing** - Auto-fit or fixed item heights - **Customization** - Styles, templates, themes (Office 2016) - **Header/Footer** - Custom header and footer views - **Scrollbar Customization** - Appearance and behavior - **Localization** - Multi-language support - **Accessibility** - UIAutomation support for screen readers ### Control Structure ``` SfListView ├── Header View (optional) - Top content area ├── Groups - Collapsible item groups │ ├── Group Header - Group title and expand/collapse │ └── Items - Data items in group ├── Items - Flat list of data-bound items └── Footer View (optional) - Bottom content area ``` ## Documentation and Navigation Guide ### Getting Started 📄 **Read:** [references/getting-started.md](references/getting-started.md) - Assembly deployment and dependencies - Adding SfListView via designer and code - Creating data object classes - Basic data binding with DataSource - First list view example ### Data Binding 📄 **Read:** [references/data-binding.md](references/data-binding.md) - Binding to IEnumerable data sources - DataSource property configuration - DisplayMember and ValueMember - ObservableCollection for live updates - Refreshing data programmatically - Data source change handling ### Selection 📄 **Read:** [references/selection.md](references/selection.md) - SelectionMode (None, One, MultiSimple, MultiExtended) - SelectedItem and SelectedItems properties - SelectedIndex and SelectedIndices - SelectionChanged event - Programmatic selection - Selection appearance customization - 📄 **Read:** [references/checkbox-selection.md](references/checkbox-selection.md) - CheckBoxSelectionMode property - CheckedItems collection - CheckedIndices property - ItemChecking and ItemChecked events - Select all functionality - Recursive checking in grouped lists - Checkbox appearance customization ### Data Operations 📄 **Read:** [references/data-operations.md](references/data-operations.md) - Grouping items by property - GroupDescriptor configuration - Sorting items (ascending, descending) - Custom sort comparers - Filtering with predicates - Filter criteria and conditions - LiveDataUpdateMode for real-time updates ### Customization 📄 **Read:** [references/appearance.md](references/appearance.md) - Style property customization - ItemStyle and GroupHeaderStyle - Theme support (Office 2016, etc.) - Colors, fonts, and borders - DrawItem event for custom rendering - Selection colors and focus indicators 📄 **Read:** [references/item-sizing-headers.md](references/item-sizing-headers.md) - ItemHeight property - GroupHeaderHeight property - AutoFitMode (Height, DynamicHeight) - Header view customization - Footer view customization - Dynamic height calculation ### Advanced Features 📄 **Read:** [references/advanced-features.md](references/advanced-features.md) - Localization and culture support - UIAutomation for accessibility - Scrollbar customization - Performance optimization techniques - View recycling strategy - Memory management ## Quick Start Example ### Basic ListView with Data Binding ```csharp using System; using System.Collections.Generic; using System.Windows.Forms; using Syncfusion.WinForms.ListView; namespace ListViewDemo { public partial class Form1 : Form { public Form1() { InitializeComponent(); InitializeListView(); } private void InitializeListView() { // Create and configure ListView SfListView listView = new SfListView(); listView.Dock = DockStyle.Fill; listView.Size = new Size(400, 500); // Set data source listView.DataSource = GetCountryData(); listView.DisplayMember = "CountryName"; // Enable selection listView.SelectionMode = Syncfusion.WinForms.ListView.Enums.SelectionMode.One; listView.SelectionChanged += ListView_SelectionChanged; // Add to form this.Controls.Add(listView); } private List<CountryInfo> GetCountryData() { return new List<CountryInfo> { new CountryInfo { CountryName = "United States", Continent = "North America" }, new CountryInfo { CountryName = "Canada", Continent = "North America" }, new CountryInfo { CountryName = "Germany", Continent = "Europe" }, new CountryInfo { CountryName = "Japan", Continent = "Asia" }, new CountryInfo { CountryName = "Australia", Continent = "Oceania" } }; } private void ListView_SelectionChanged(object sender, EventArgs e) { if (sender is SfListView listView && listView.SelectedItem != null) { var selected = listView.SelectedItem as CountryInfo; MessageBox.Show($"Selected: {selected.CountryName}"); } } } public class CountryInfo { public string CountryName { get; set; } public string Continent { get; set; } } } ``` ## Common Patterns ### Pattern 1: Grouped and Sorted List ```csharp // Create ListView SfListView listView = new SfListView(); listView.DataSource = GetCountryData(); listView.DisplayMember = "CountryName"; // Add grouping by continent listView.View.GroupDescriptors.Add(new GroupDescriptor() { PropertyName = "Continent" }); // Add sorting by country name listView.View.SortDescriptors.Add(new SortDescriptor() { PropertyName = "CountryName", Direction = Syncfusion.Data.ListSortDirection.Ascending }); ``` ### Pattern 2: Checkbox Selection with Select All ```csharp // Enable checkbox mode listView.CheckBoxMode = CheckBoxMode.Default; // Handle checked items changes listView.CheckStateChanged += (s, e) => { MessageBox.Show($"Checked items: {listView.CheckedItems.Count}"); }; // Add Select All button Button selectAllBtn = new Button { Text = "Select All" }; selectAllBtn.Click += (s, e) => { // Check all items for (int i = 0; i < listView.View.Items.Count; i++) { listView.SetItemCheckState(i, CheckState.Checked); } }; ``` ### Pattern 3: Filtered and Searchable List ```csharp // Add TextBox for search TextBox searchBox = new TextBox(); searchBox.TextChanged += (s, e) => { string searchText = searchBox.Text.ToLower(); // Apply filter listView.View.Filter = item => { if (item is CountryInfo country) { return country.CountryName.ToLower().Contains(searchText); } return false; }; // Refresh view listView.View.RefreshFilter(); }; ``` ### Pattern 4: Custom Item Styling ```csharp // Customize item appearance listView.Style.ItemStyle.BackColor = Color.White; listView.Style.ItemStyle.HoverBackColor = Color.LightBlue; listView.Style.ItemStyle.SelectedItemBackColor = Color.Blue; listView.Style.ItemStyle.SelectedItemForeColor = Color.White; listView.Style.ItemStyle.Font = new Font("Segoe UI", 10f); // Customize group headers listView.Style.GroupHeaderStyle.BackColor = Color.LightGray; listView.Style.GroupHeaderStyle.ForeColor = Color.Black; listView.Style.GroupHeaderStyle.Font = new Font("Segoe UI", 10f, FontStyle.Bold); ``` ### Pattern 5: ObservableCollection with Live Updates ```csharp using System.Collections.ObjectModel; using System.ComponentModel; public class CountryViewModel : INotifyPropertyChanged { private ObservableCollection<CountryInfo> countries; public ObservableCollection<CountryInfo> Countries { get { return countries; } set { countries = value; OnPropertyChanged(nameof(Countries)); } } public CountryViewModel() { Countries = new ObservableCollection<CountryInfo> { new CountryInfo { CountryName = "USA", Continent = "North America" } }; } // Add item - ListView updates automatically public void AddCountry(CountryInfo country) { Countries.Add(country); } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } // Bind to ListView var viewModel = new CountryViewModel(); listView.DataSource = viewModel.Countries; listView.DisplayMember = "CountryName"; ``` ## Key Properties ### Core Properties | Property | Type | Description | |----------|------|-------------| | **DataSource** | object | Gets/sets the data source (IEnumerable) | | **DisplayMember** | string | Property name to display in items | | **ValueMember** | string | Property name for item values | | **SelectedItem** | object | Currently selected item | | **SelectedItems** | List<object> | Collection of selected items | | **CheckedItems** | List<object> | Collection of checked items | ### Selection Properties | Property | Type | Description | |----------|------|-------------| | **SelectionMode** | SelectionMode | None, One, MultiSimple, MultiExtended | | **SelectedIndex** | int | Index of selected item | | **SelectedIndices** | List<int> | Indices of selected items | | **AllowMultiSelection** | bool | Enable multiple selection | ### Checkbox Properties | Property | Type | Description | |----------|------|-------------| | **CheckBoxSelectionMode** | CheckBoxSelectionMode | None, Default, SelectAll | | **CheckedIndices** | List<int> | Indices of checked items | | **AllowRecursiveChecking** | bool | Enable recursive checking in groups | | **ShowCheckBoxes** | bool | Show/hide checkboxes | ### Appearance Properties | Property | Type | Description | |----------|------|-------------| | **Style** | ListViewStyle | Overall style configuration | | **ItemHeight** | int | Height of each item | | **GroupHeaderHeight** | int | Height of group headers | | **AutoFitMode** | AutoFitMode | None, Height, DynamicHeight | ### Data Operation Properties | Property | Type | Description | |----------|------|-------------| | **View** | DataView | Access to grouping, sorting, filtering | | **LiveDataUpdateMode** | LiveDataUpdateMode | AllowDataShaping, AllowSummary, Default | ### Events | Event | Description | |-------|-------------| | **SelectionChanged** | Fired when selection changes | | **ItemChecking** | Fired while an item is being checked (cancelable) | | **ItemChecked** | Fired after an item's checked state has changed | | **ItemsSourceChanged** | Fired when DataSource changes | | **DrawItem** | Custom drawing for items | | **QueryItemHeight** | Dynamic item height calculation | ## Common Use Cases ### 1. Contact List Application Display contacts with grouping by first letter, search functionality, and selection for actions. ### 2. Product Catalog Browser Show products with filtering by category, sorting by price, and checkbox selection for cart. ### 3. File Explorer View Create file/folder lists with icons, grouping by type, sorting by name/date/size. ### 4. Task Management Lists Display tasks with checkbox completion, grouping by priority/status, filtering by date. ### 5. Email Client Inbox Show email messages with selection, sorting by date, filtering by read/unread status. ### 6. Customer Order Lists Display orders with grouping by status, sorting by date, selection for details. ### 7. Settings Configuration UI Create lists of settings with checkbox selection for enable/disable features. ### 8. Data Grid Alternative Use ListView for simpler list-based data display without complex grid features. ## Related Components - **DataGrid** - For tabular data with columns - **TreeView** - For hierarchical data structures - **ComboBox** - For dropdown selection from list - **CheckedListBox** - Simple checkbox list without advanced features ## Best Practices 1. **Data Binding** - Use ObservableCollection for automatic UI updates - Implement INotifyPropertyChanged for item property changes - Set DisplayMember and ValueMember for clarity 2. **Performance** - Enable view recycling (enabled by default) - Use AutoFitMode carefully with large datasets - Avoid custom DrawItem for simple scenarios - Use filtering/grouping instead of recreating data source 3. **Selection** - Handle SelectionChanged event for user actions - Use appropriate SelectionMode for use case - Clear selection when data source changes if needed 4. **Grouping and Filtering** - Use View.GroupDescriptors for grouping - Set View.Filter predicate for filtering - Call RefreshFilter() after changing filter criteria - Use SortDescriptors for consistent ordering
View on GitHub
This SKILL.md is very large, so SkillsMP previews the first section here. View on GitHub