AlfaToad.CustomControls
3.0.1
See the version list below for details.
dotnet add package AlfaToad.CustomControls --version 3.0.1
NuGet\Install-Package AlfaToad.CustomControls -Version 3.0.1
<PackageReference Include="AlfaToad.CustomControls" Version="3.0.1" />
<PackageVersion Include="AlfaToad.CustomControls" Version="3.0.1" />
<PackageReference Include="AlfaToad.CustomControls" />
paket add AlfaToad.CustomControls --version 3.0.1
#r "nuget: AlfaToad.CustomControls, 3.0.1"
#:package AlfaToad.CustomControls@3.0.1
#addin nuget:?package=AlfaToad.CustomControls&version=3.0.1
#tool nuget:?package=AlfaToad.CustomControls&version=3.0.1
AlfaToad.CustomControls
Библиотека пользовательских контролов для Windows Forms (.NET Framework 4.8).
Два основных компонента:
ExamDataGridView— таблица с привязкой кDataSet/DataTableи настраиваемым оформлением строк.ProductCardControl— карточка сущности: изображение, заголовок и набор полей с условиями видимости и стиля.
Пакет: NuGet — AlfaToad.CustomControls
Содержание
- Требования
- Установка
- Быстрый старт
- Панель элементов Visual Studio
- ExamDataGridView
- ProductCardControl
- Тема оформления
- Сборка из исходников
- Структура решения
Требования
| Компонент | Версия |
|---|---|
| .NET Framework | 4.8 |
| Тип приложения | Windows Forms |
| Visual Studio (дизайнер) | 2019+ рекомендуется |
Установка
NuGet Package Manager
Install-Package AlfaToad.CustomControls
.NET CLI
dotnet add package AlfaToad.CustomControls
PackageReference
<PackageReference Include="AlfaToad.CustomControls" Version="2.0.2" />
После установки пересоберите проект. Сборка AlfaToad.CustomControls.dll появится в каталоге вывода (например bin\Debug\net48\).
Быстрый старт
using System.Data;
using AlfaToad.CustomControls.Controls;
// --- Таблица ---
var grid = new ExamDataGridView
{
Dock = DockStyle.Fill,
DiscountColumnName = "Действующая скидка" // имя столбца в DataTable
};
DataSet dataSet = LoadYourDataSet(); // SqlDataAdapter, ручное заполнение и т.д.
grid.BindDataSet(dataSet, "Products");
// --- Карточка ---
var card = new ProductCardControl
{
Dock = DockStyle.Fill,
ImagesFolder = @"C:\App\Data\Images"
};
card.Bind(dataSet.Tables["Products"].Rows[0]);
// Синхронизация: при выборе строки в таблице обновлять карточку
grid.SelectionChanged += (_, __) =>
{
if (grid.CurrentRow?.DataBoundItem is DataRowView view)
card.Bind(view.Row);
};
Панель элементов Visual Studio
- Добавьте ссылку на пакет или проект
AlfaToad.CustomControls. - Соберите решение.
- Откройте форму в конструкторе.
В панели элементов должны появиться:
| Отображаемое имя | Тип |
|---|---|
| Таблица данных | ExamDataGridView |
| Карточка записи | ProductCardControl |
Если контролы не отображаются
- ПКМ по панели элементов → Выбрать элементы…
- Вкладка Компоненты .NET Framework
- Обзор… → укажите
AlfaToad.CustomControls.dll
(путь:packages\AlfaToad.CustomControls\<версия>\lib\net48\илиbinпроекта библиотеки) - Отметьте нужные типы → ОК
Контролы можно перетаскивать на форму как обычные элементы WinForms.
ExamDataGridView
Наследник DataGridView с поддержкой привязки к DataSet и готовым оформлением.
Привязка данных
Способ 1 — метод:
grid.BindDataSet(dataSet, "TableName", autoGenerateColumns: true);
Способ 2 — свойства:
grid.DataSet = dataSet;
grid.DataMember = "TableName";
Поведение аналогично стандартному DataGridView: источник — DataSet, таблица задаётся через DataMember.
Основные свойства
| Свойство | Описание |
|---|---|
DataSet |
Набор данных |
DataMember |
Имя таблицы в DataSet |
DiscountColumnName |
Столбец со значением скидки (по умолчанию "Действующая скидка") |
ApplyDiscountHighlight |
Подсвечивать строки при скидке выше порога (по умолчанию true) |
Подсветка скидки
Если значение в столбце скидки больше 17%, фон ячеек строки меняется на #FFDEAD. Порог и цвета задаются в ExamTheme.
Проверка значения скидки из кода:
if (ExamDataGridView.TryGetDiscountPercent(cellValue, out decimal percent))
{
// percent — число, символ % в строке учитывается
}
Сброс стиля
grid.ApplyExamStyle();
Применяет шрифт Arial, цвета заголовков и ячеек из ExamTheme.
ProductCardControl
Контрол для отображения одной записи: картинка слева, справа — список полей «подпись / значение».
Привязка к данным
card.Bind(dataRow);
// или по индексу в таблице DataSet
card.Bind(dataSet, "Products", rowIndex: 0);
Изображение
| Свойство | Описание |
|---|---|
ImageColumnName |
Имя столбца с файлом картинки (по умолчанию "Фото") |
ImagesFolder |
Каталог, где лежат файлы (1.jpg, photo.png и т.д.) |
TitleColumnName |
Столбец для заголовка карточки (по умолчанию "Наименование товара") |
Путь в ячейке может быть только именем файла (ищется в ImagesFolder) или полным путём.
Поля по умолчанию
При создании контрола регистрируются типовые поля (их можно удалить или заменить):
| Ключ | Подпись | Столбец DataTable |
|---|---|---|
Артикул |
Артикул | Артикул |
Категория |
Категория | Категория товара |
Описание |
Описание | Описание товара |
Производитель |
Производитель | Производитель |
Поставщик |
Поставщик | Поставщик |
Цена |
Цена | Цена |
Единица |
Ед. изм. | Единица измерения |
Количество |
На складе | Кол-во на складе |
Скидка |
Скидка | Действующая скидка |
Имена столбцов можно изменить при добавлении своих полей.
Добавление и настройка полей
// Новое поле
card.AddField("Статус", "Статус заказа", "OrderStatus");
// Удаление
card.RemoveField("Единица");
// Доступ к описанию поля
ProductFieldDescriptor field = card.GetField("Цена");
field.Format = "N2";
field.Caption = "Цена, ₽";
Ручное изменение значений
card.SetFieldValue("Цена", 1999.99m);
object value = card.GetFieldValue("Цена");
card.RefreshFromRow(); // перечитать все поля из текущей DataRow
card.Clear();
Условия видимости
card.GetField("Скидка").VisibleWhen = ctx =>
{
return ExamDataGridView.TryGetDiscountPercent(ctx.Value, out var d) && d > 0;
};
card.GetField("Описание").VisibleWhen = ctx =>
!string.IsNullOrWhiteSpace(ctx.GetValue<string>("Описание товара"));
ctx — ProductFieldContext: доступ к DataRow, ключу поля и значению; метод GetValue<T>("ColumnName") читает другие столбцы строки.
Условия оформления (фон, цвет текста)
card.GetField("Цена").BackgroundSelector = ctx =>
ctx.GetValue<decimal>("Цена") > 10_000m
? ExamTheme.AccentBackground
: (Color?)null;
card.GetField("Цена").ForeColorSelector = ctx => Color.DarkRed;
Подсветка высокой скидки
card.ApplyHighDiscountRule("Скидка");
Для поля с ключом Скидка фон строки станет #FFDEAD, если скидка > 17%.
Доступ к строке интерфейса
ProductFieldRowControl row = card.GetFieldRow("Описание");
row.ValueText = "Новый текст";
row.Visible = false;
Событие изменения
card.FieldValueChanged += (s, e) =>
{
// e.FieldKey, e.Value
};
Тема оформления
Класс AlfaToad.CustomControls.Theme.ExamTheme:
| Константа / член | Значение |
|---|---|
MainBackground |
#FFFFFF |
SecondaryBackground |
#F5DEB3 |
AccentBackground |
#DEB887 |
HighDiscountBackground |
#FFDEAD |
HighDiscountThresholdPercent |
17 |
FontFamilyName |
Arial |
CreateFont(size, style) |
Создание шрифта темы |
Используется в обоих контролах; при необходимости цвета можно переопределять в коде после ApplyExamStyle().
Сборка из исходников
git clone <ваш-репозиторий>
cd <каталог-решения>
dotnet build DemoExam.sln -c Release
Запуск примера:
dotnet run --project src/DemoExam.Controls.Sample/DemoExam.Controls.Sample.csproj
Локальная сборка пакета:
dotnet pack src/DemoExam.Controls/DemoExam.Controls.csproj -c Release -o ./nupkg
Структура решения
├── README.md
├── DemoExam.sln
├── build/
│ └── AlfaToad.CustomControls.targets # MSBuild: поддержка дизайнера
├── nupkg/ # собранные .nupkg (после pack)
└── src/
├── DemoExam.Controls/ # библиотека AlfaToad.CustomControls
│ ├── Controls/
│ ├── Data/
│ ├── Design/ # элементы Toolbox
│ ├── Models/
│ └── Theme/
└── DemoExam.Controls.Sample/ # демо-приложение
Пространства имён
| Пространство | Назначение |
|---|---|
AlfaToad.CustomControls.Controls |
ExamDataGridView, ProductCardControl |
AlfaToad.CustomControls.Data |
ExamDataSetBinder |
AlfaToad.CustomControls.Models |
ProductFieldDescriptor, ProductFieldContext |
AlfaToad.CustomControls.Theme |
ExamTheme |
AlfaToad.CustomControls.Design |
классы ToolboxItem |
Лицензия
Уточните условия использования у автора пакета (поле Authors в NuGet: AlfaToad).
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0-windows7.0 is compatible. net9.0-windows was computed. net10.0-windows was computed. |
| .NET Framework | net48 is compatible. net481 was computed. |
-
.NETFramework 4.8
- No dependencies.
-
net8.0-windows7.0
- No dependencies.
NuGet packages (2)
Showing the top 2 NuGet packages that depend on AlfaToad.CustomControls:
| Package | Downloads |
|---|---|
|
AlfaToad.DataSetCRUDS
Готовые формы добавления и редактирования для ScrollableDetailPanel и ScrollableOrderPanel с привязкой к DataSet. |
|
|
AlfaToad.DefaultScreens
Готовые экранные формы WinForms с ролевым доступом, входом и каталогом на базе AlfaToad.CustomControls и AlfaToad.DataSetCRUDS. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.2.10 | 163 | 6/8/2026 |
| 4.2.9 | 112 | 6/8/2026 |
| 4.2.8 | 118 | 6/8/2026 |
| 4.2.7 | 128 | 6/8/2026 |
| 4.2.6 | 141 | 6/8/2026 |
| 4.2.5 | 350 | 6/7/2026 |
| 4.2.4 | 117 | 6/7/2026 |
| 4.2.3 | 133 | 6/7/2026 |
| 4.2.2 | 121 | 6/7/2026 |
| 4.2.1 | 137 | 6/6/2026 |
| 4.2.0 | 113 | 6/6/2026 |
| 4.1.3 | 111 | 6/5/2026 |
| 4.1.2 | 115 | 6/5/2026 |
| 4.1.1 | 120 | 6/5/2026 |
| 4.1.0 | 112 | 6/5/2026 |
| 4.0.0 | 110 | 6/5/2026 |
| 3.0.2 | 104 | 6/5/2026 |
| 3.0.1 | 98 | 6/5/2026 |
| 3.0.0 | 111 | 6/5/2026 |
| 2.0.2 | 116 | 6/4/2026 |