AlfaToad.CustomControls
Библиотека пользовательских контролов для Windows Forms (.NET Framework 4.8 и .NET 8).
Пакет: NuGet — AlfaToad.CustomControls
Компоненты
| Контрол |
Назначение |
ScrollableDetailPanel |
Прокручиваемый список строк с фото, полями товара и скидкой |
ScrollableOrderPanel |
Прокручиваемый список строк заказа |
BoundDataGridView |
Таблица с привязкой к DataSet и подсветкой столбца |
Установка
dotnet add package AlfaToad.CustomControls --version 4.1.3
<PackageReference Include="AlfaToad.CustomControls" Version="4.1.2" />
Поля данных (имена столбцов в DataTable)
| Поле на экране |
Свойство |
Значение по умолчанию |
| Фото |
ImageField |
Фото |
| Категория |
CategoryField |
Категория товара |
| Наименование |
NameField |
Наименование товара |
| Описание |
DescriptionField |
Описание товара |
| Производитель |
ManufacturerField |
Производитель |
| Поставщик |
SupplierField |
Поставщик |
| Цена |
PriceField |
Цена |
| Единица измерения |
UnitField |
Единица измерения |
| Количество на складе |
StockField |
Кол-во на складе |
| Скидка |
DiscountField |
Действующая скидка |
Подписи на экране
| Подпись |
Свойство |
Значение по умолчанию |
| Описание |
DescriptionCaption |
Описание товара: |
| Производитель |
ManufacturerCaption |
Производитель: |
| Поставщик |
SupplierCaption |
Поставщик: |
| Цена |
PriceCaption |
Цена: |
| Единица измерения |
UnitCaption |
Единица измерения: |
| Количество на складе |
StockCaption |
Количество на складе: |
| Заголовок столбца скидки |
DiscountCaption |
Действующая скидка |
Изображения
| Свойство |
Описание |
NoImage |
Картинка при отсутствии файла или пустом поле. По умолчанию не задана — область фото остаётся пустой. |
ImagesFolder |
Папка, из которой загружаются файлы по имени из ImageField. |
Размеры строки
| Свойство |
По умолчанию |
RowHeight |
160 |
ImageColumnWidth |
120 |
DiscountColumnWidth |
110 |
RowSpacing |
8 (зона сепаратора между строками) |
OutOfStockRowColor |
голубой #ADD8E6 (количество на складе ≤ 0) |
RowSeparatorColor |
Silver (линия между записями) |
ImageLeftPadding |
8 (отступ фото от левого края) |
DataSource |
источник данных в дизайнере (DataSet / DataTable / BindingSource) |
DataMember |
имя таблицы в DataSet |
Поля данных
| Поле на экране |
Свойство |
Значение по умолчанию |
| Артикул заказа |
ArticleField |
Артикул заказа |
| Статус |
StatusField |
Статус заказа |
| Адрес пункта выдачи |
AddressField |
Адрес пункта выдачи |
| Дата заказа |
OrderDateField |
Дата заказа |
| Дата доставки |
DeliveryDateField |
Дата доставки |
Подписи на экране
| Подпись |
Свойство |
Значение по умолчанию |
| Артикул |
ArticleCaption |
Артикул заказа |
| Статус |
StatusCaption |
Статус заказа |
| Адрес |
AddressCaption |
Адрес пункта выдачи |
| Дата заказа |
OrderDateCaption |
Дата заказа |
| Дата доставки |
DeliveryDateCaption |
Дата доставки |
Размеры строки
| Свойство |
По умолчанию |
RowHeight |
110 |
DeliveryColumnWidth |
140 |
BoundDataGridView — настраиваемые свойства
| Свойство |
Описание |
По умолчанию |
HighlightColumnName |
Столбец для подсветки ячеек |
Действующая скидка |
ApplyRowHighlight |
Включить подсветку |
true |
Appearance |
Палитра цветов |
см. ниже |
AppearancePalette — настройка цветов и шрифтов
Общий объект Appearance доступен у всех трёх контролов.
| Свойство |
Назначение |
По умолчанию |
MainBackground |
Основной фон |
#FFFFFF |
SectionBackground |
Фон заголовков таблицы |
#F5DEB3 |
AccentBackground |
Линии сетки таблицы |
#DEB887 |
HighlightBackground |
Подсветка скидки > порога |
#FFDEAD |
PrimaryText |
Цвет текста |
Black |
SeparatorText |
Цвет разделителя \| |
Gray |
BorderColor |
Рамки строк списка |
Black |
RowSeparatorColor |
Линия между записями |
Silver |
OutOfStockBackground |
Фон строки без товара на складе |
#ADD8E6 |
StrikethroughPriceColor |
Перечёркнутая цена при скидке |
Red |
FinalPriceColor |
Итоговая цена при скидке |
Black |
FontFamily |
Шрифт |
Arial |
BaseFontSize |
Размер обычного текста |
9 |
TitleFontSize |
Размер заголовка строки |
10 |
HighlightThresholdPercent |
Порог подсветки скидки (%) |
17 |
Примеры использования
Список товаров с привязкой к DataSet
using System.Data;
using System.Drawing;
using AlfaToad.CustomControls.Controls;
using AlfaToad.CustomControls.Theme;
var panel = new ScrollableDetailPanel { Dock = DockStyle.Fill };
// Своя картинка «нет фото» (необязательно)
panel.NoImage = Image.FromFile(@"C:\images\no-photo.png");
panel.ImagesFolder = @"C:\images\products";
// Переименование столбцов под вашу таблицу
panel.CategoryField = "CategoryName";
panel.NameField = "ProductName";
panel.DiscountField = "DiscountPercent";
// Цвета
panel.Appearance = new AppearancePalette
{
MainBackground = Color.White,
HighlightBackground = Color.FromArgb(255, 222, 173),
BorderColor = Color.Black,
HighlightThresholdPercent = 17m
};
DataSet dataSet = LoadProducts(); // SqlDataAdapter и т.д.
panel.BindDataSet(dataSet, "Products");
Поведение цены: если Действующая скидка > 0, основная цена отображается красной и перечёркнутой, рядом — итоговая цена чёрным (цена × (1 − скидка/100)).
Нет на складе: если Кол-во на складе ≤ 0, вся строка подсвечивается цветом OutOfStockRowColor.
Панель включена по умолчанию (ShowQueryPanel = true). Всё применяется в реальном времени без кнопки «Найти».
| Элемент |
Поведение |
| Поиск |
Подстрока по всем текстовым столбцам (string), одновременно по нескольким полям (логика OR) |
| Сортировка |
Цена ↑/↓, кол-во на складе ↑/↓; выбор сохраняется при поиске и фильтре |
| Поставщик |
Выпадающий список; первый пункт Все поставщики сбрасывает фильтр |
| Свойство |
Описание |
ShowQueryPanel |
Показать панель (по умолчанию true) |
AllSuppliersCaption |
Текст сброса фильтра (Все поставщики) |
SearchFields |
Ограничить столбцы поиска (пусто = все текстовые) |
SupplierField |
Столбец для фильтра поставщика (Поставщик) |
PriceField / StockField |
Столбцы для сортировки |
// Скрыть панель для ролей без прав (например, клиент)
panel.ShowQueryPanel = userIsManagerOrAdmin;
После TableAdapter.Fill(...) список и список поставщиков обновляются автоматически.
Список заказов
var orders = new ScrollableOrderPanel { Dock = DockStyle.Fill };
orders.Appearance = AppearancePalette.CreateDefault();
orders.Appearance.AccentBackground = Color.BurlyWood;
orders.BindDataSet(dataSet, "Orders");
Таблица с подсветкой скидки
var grid = new BoundDataGridView { Dock = DockStyle.Fill };
grid.Appearance = AppearancePalette.CreateDefault();
grid.HighlightColumnName = "Действующая скидка";
grid.ApplyDefaultStyle();
grid.BindDataSet(dataSet, "Products");
Смена цветов после создания
panel.Appearance.MainBackground = ColorTranslator.FromHtml("#FAFAFA");
panel.Appearance.HighlightBackground = ColorTranslator.FromHtml("#FFDEAD");
panel.Appearance.BorderColor = Color.DimGray;
panel.ApplyAppearance();
Сборка
dotnet build AlfaToad.CustomControls.sln -c Release
dotnet run --project src/AlfaToad.CustomControls.Sample -f net8.0-windows -c Release
dotnet pack src/AlfaToad.CustomControls/AlfaToad.CustomControls.csproj -c Release -o ./nupkg
Структура решения
├── AlfaToad.CustomControls.sln
├── README.md
├── build/AlfaToad.CustomControls.targets
└── src/
├── AlfaToad.CustomControls/ # библиотека
└── AlfaToad.CustomControls.Sample/ # пример