Использование QTableWidget будет первым способом, который посоветуют Вам для создания таблиц с чекбоксами на Qt. Поэтому давайте рассмотрим и этот вариант работы с таблицами в Qt и конечно же применим чекбоксы.
Итак, чтобы урок был более приближен к реальности, захватим немного программного кода из урока по QDataWidgetMapper . А именно возьмём класс для работы с базой данных, чтобы уж сразу делать таблицу из базы данных. После чего сделаем форму главного окна приложения и выведем данные из таблицы с отображением чекбоксов. Естественно, при включении приложения таблица база данных будет создана и заполнена несколькими записями, которые мы и будем выводить в виджет. Программный код был написан в QtCreator 3.3.1 на основе Qt 5.4.1.
Структура проекта для QTableWidget
- QTableWidgetExample.pro — профайл;
- mainwindow.h — заголовочный файл основного окна приложения;
- mainwindow.cpp — исходный код окна;
- main.cpp — основной исходный файл, с которого стартует приложение;
- mainwindow.ui — формочка основного окна приложения;
- database.h — заголовочный файл вспомогательного класса, применяющегося для работы с информацией, которая помещена в базу данных;
- database.cpp — исходный файл вспомогательного класса, применяющегося для работы с информацией, которая помещена в базу данных;
mainwindow.ui
Всё, что Вам нужно сделать с этим файлом, это кинуть в форму главного окна в дизайнере QTableWidget.
Создать таблицу в worde,проще не бывает!
mainwindow.h
В данном файле объявляется объект базы данных, с которым мы будем работать, а также метод для заполнения данными QTableWidget.
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include /* My includes */ #include namespace Ui < class MainWindow; >class MainWindow : public QMainWindow < Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; DataBase *db; private: /* Метод для настройки интерфейса, * в данном методе будет выполняться заполнение QTableWidget * записями из таблицы * */ void createUI(const QStringList >; #endif // MAINWINDOW_H
mainwindow.cpp
В этом файле заключена цель всего урока, а именно настройка QTableWidget и заполнение его записями из базы данных.
#include «mainwindow.h» #include «ui_mainwindow.h» MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) < ui->setupUi(this); this->setWindowTitle(«QTableWidget Example»); /* Первым делом необходимо создать объект для работы с базой данных * и инициализировать подключение к базе данных * */ db = new DataBase(); db->connectToDataBase(); /* Наполним базу данных записями */ for(int i = 1; i < 5; i++)< /* Вставляем запись в таблицу, сразу устанавливаем состояние чекбокса. * Если устройство имеет нечётный номер, то статус чекбокса true, * иначе false * */ db->inserIntoDeviceTable(QVariantList() /* Настраиваем внешний вид таблицы * с заданием названий колонок, а также * Заполняем таблицу записями из базы данных * */ this->createUI(QStringList() MainWindow::~MainWindow() < delete ui; >/* Метод для настройки интерфейса, * в данном методе будет выполняться заполнение QTableWidget * записями из таблицы * */ void MainWindow::createUI(const QStringList ui->tableWidget->setColumnCount(5); // Указываем число колонок ui->tableWidget->setShowGrid(true); // Включаем сетку // Разрешаем выделение только одного элемента ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); // Разрешаем выделение построчно ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); // Устанавливаем заголовки колонок ui->tableWidget->setHorizontalHeaderLabels(headers); // Растягиваем последнюю колонку на всё доступное пространство ui->tableWidget->horizontalHeader()->setStretchLastSection(true); // Скрываем колонку под номером 0 ui->tableWidget->hideColumn(0); // Создаём запрос для для выборки записей из базы данных QSqlQuery query(«SELECT » DEVICE «.id, » DEVICE «.» DEVICE_CHECK_STATE «, » DEVICE «.» DEVICE_HOSTNAME «, » DEVICE «.» DEVICE_IP «, » DEVICE «.» DEVICE_MAC » FROM » DEVICE); /* Выполняем заполнение QTableWidget записями с помощью цикла * */ for(int i = 0; query.next(); i++)< // Вставляем строку ui->tableWidget->insertRow(i); /* Устанавливаем в первую колонку id забирая его из результата SQL-запроса * Эта колонка будет скрыта * */ ui->tableWidget->setItem(i,0, new QTableWidgetItem(query.value(0).toString())); // Создаём элемент, который будет выполнять роль чекбокса QTableWidgetItem *item = new QTableWidgetItem(); item->data(Qt::CheckStateRole); /* Проверяем, на статус нечетности, если нечетное устройство, то * выставляем состояние чекбокса в Checked, иначе в Unchecked * */ if(query.value(1).toInt() == 1)< item->setCheckState(Qt::Checked); > else < item->setCheckState(Qt::Unchecked); > // Устанавливаем чекбокс во вторую колонку ui->tableWidget->setItem(i,1, item); // Далее забираем все данные из результата запроса и устанавливаем в остальные поля ui->tableWidget->setItem(i,2, new QTableWidgetItem(query.value(2).toString())); ui->tableWidget->setItem(i,3, new QTableWidgetItem(query.value(3).toString())); ui->tableWidget->setItem(i,4, new QTableWidgetItem(query.value(4).toString())); > // Ресайзим колонки по содержимому ui->tableWidget->resizeColumnsToContents(); >
database.h
как создать таблицу в windows forms
Пошаговое руководство. Создание таблицы данных в конструктор наборов данных
В этом пошаговом руководстве объясняется, как создать DataTable (без адаптера таблицы) с помощью Конструктор наборов данных. Сведения о создании таблиц данных, которые включают TableAdapter, см. в разделе Создание и настройка адаптеров таблиц.
Как в Python писать программы с интерфейсом?
Создание приложения Windows Forms
В Visual Studio в меню Файл выберите пункты Создать > Проект.
Назовите проект дататаблевалксраугх и нажмите кнопку ОК.
Проект дататаблевалксраугх создается и добавляется в Обозреватель решений.
Добавление нового набора данных в приложение
В меню Проект выберите команду Добавить новый элемент.
Откроется диалоговое окно Добавление нового элемента.
На панели слева выберите данные, а затем выберите набор данных в средней области.
Нажмите кнопку Добавить.
Visual Studio добавляет файл с именем DataSet1. xsd в проект и открывает его в конструктор наборов данных.
Добавить новый объект DataTable в набор данных
Перетащите объект DataTable с вкладки набор данных на панели элементов на Конструктор наборов данных.
Добавить столбцы в таблицу данных
В окне Свойства присвойте свойству DataType значение System.Int16.
Повторите эту процедуру и добавьте следующие столбцы:
Задание первичного ключа для таблицы
Все таблицы данных должны иметь первичный ключ. Первичный ключ однозначно определяет определенную запись в таблице данных.
Чтобы задать первичный ключ, щелкните правой кнопкой мыши столбец сонгид и выберите пункт Задать первичный ключ. Рядом со столбцом сонгид появится значок ключа.
Сохранение проекта
Практическое руководство. Добавление таблиц и столбцов в элемент управления DataGrid в формах Windows Forms с помощью конструктора
Элемент управления DataGridView заменяет элемент управления DataGrid и расширяет его функциональные возможности; однако при необходимости элемент управления DataGrid можно сохранить для обратной совместимости и использования в будущем. Дополнительные сведения см. в разделе Различия элементов управления DataGridView и DataGrid в Windows Forms.
для следующих процедур требуется проект приложения Windows с формой, содержащей DataGrid элемент управления. сведения о настройке такого проекта см. в статьях как создать проект приложения Windows Forms и как добавить элементы управления в Windows Forms. по умолчанию в Visual Studio 2005 DataGrid элемент управления отсутствует на панели элементов. Дополнительные сведения о добавлении элементов см. в разделе как добавить элементы на панель элементов.
Добавление таблицы в элемент управления DataGrid в конструкторе
Чтобы отобразить данные в таблице, необходимо сначала привязать DataGrid элемент управления к набору данных. дополнительные сведения см. в разделе руководство. привязка Windows Forms элемента управления DataGrid к источнику данных с помощью конструктора.
При повторном открытии редактора коллекции все таблицы данных, привязанные к элементу управления, будут отображаться в раскрывающемся списке для MappingName свойства стиля таблицы.
В поле члены редактора коллекции выберите стиль таблицы.
В диалоговом окне Свойства редактора коллекции выберите MappingName значение для таблицы, которую необходимо отобразить.
Добавление столбца в элемент управления DataGrid в конструкторе
В раскрывающемся списке можно выбрать DataGridTextBoxColumn DataGridBoolColumn тип или.
Нажмите кнопку ОК, чтобы закрыть Редактор коллекции DataGridColumnStyle, а затем снова откройте его, нажав кнопку с многоточием рядом со GridColumnStyles свойством.
При повторном открытии редактора коллекции все столбцы данных в связанных таблицах данных будут отображаться в раскрывающемся списке для MappingName свойства стиля столбца.
В поле члены редактора коллекции щелкните стиль столбца.
В диалоговом окне Свойства редактора коллекции выберите MappingName значение для столбца, который необходимо отобразить.
Создание таблиц подстановки в приложениях Windows Forms
Таблица Уточняющий запрос термина описывает элементы управления, привязанные к двум связанным таблицам данных. Эти элементы управления «Уточняющий запрос» отображают данные из первой таблицы на основе значения, выбранного во второй таблице.
Таблицы подстановки можно создать, перетащив главный узел родительской таблицы (из окна Источники данных) на элемент управления в форме, который уже привязан к столбцу в связанной дочерней таблице.
Привязка элемента управления «Уточняющий запрос»
Для таблиц подстановки необходимо, чтобы в окне Источники данных были доступны две связанные таблицы или объекты. Дополнительные сведения см. в разделе связи в наборах данных.
Узел дочерней таблицы — это узел, который отображается как развертываемый дочерний узел в родительской таблице.
Нахождение узла, связывающего две таблицы ( CustomerID узел из предыдущего примера). Измените тип перетаскивания на, ComboBox выбрав поле со списком в списке элементов управления.
Перетащите главный узел дочерней таблицы из окна Источники данных на форму.
Элементы управления с привязкой к данным (с описательными метками) и панель инструментов ( BindingNavigator ) отображаются в форме. Набор данных, TableAdapter, BindingSource и BindingNavigator отображается в области компонентов.
Теперь перетащите главный узел родительской таблицы из окна Источники данных непосредственно в элемент управления Уточняющий запрос ( ComboBox ).
Привязки подстановки теперь установлены. Конкретные свойства, заданные для элемента управления, см. в следующей таблице.
Шаг 1. Создание проекта и добавление таблицы в форму
Первым шагом создания игры «Подбери пару!» является создание проекта и добавление таблицы в форму. Таблица помогает равномерно распределить значки по сетке 4×4. Можно также задать несколько свойств, чтобы улучшить внешний вид игрового поля.
Создание проекта и добавление таблицы в форму
В строке меню щелкните Файл > Создать > Проект.
Выберите Visual C# или Visual Basic в левой области диалогового окна Новый проект, а затем — Классическое приложение Windows.
В списке шаблонов выберите шаблон Приложение Windows Forms (.NET Framework), назовите его MatchingGame, а затем нажмите кнопку ОК.
Появится форма с именем Form1.cs или Form1.vb, в зависимости от выбранного языка программирования.
Дополнительные сведения см. в разделе Установка Visual Studio.
На начальном экране выберите Создать проект.
В поле поиска окна Создание проекта введите Windows Forms. Затем в списке Тип проекта выберите Рабочий стол.
Применив фильтр Тип проекта, выберите шаблон Приложение Windows Forms (.NET Framework) для C# или Visual Basic и нажмите кнопку Далее.
Если шаблон Приложение Windows Forms (.NET Framework) отсутствует, его можно установить из окна Создание проекта. В сообщении Не нашли то, что искали? выберите ссылку Установка других средств и компонентов.
Затем нажмите кнопку Изменить в Visual Studio Installer. Вам может быть предложено сохранить результаты работы; в таком случае сделайте это. Выберите Продолжить, чтобы установить рабочую нагрузку.
В окне Настроить новый проект введите MatchingGame в поле Имя проекта. Затем нажмите Создать.
Задание свойств формы
В окне Свойства задайте следующие значения свойств формы.
Измените свойство формы Text с Form1 на Matching Game. Этот текст отображается в верхней части окна игры.
Установите размер формы на 550 пикселей в ширину и 550 пикселей в высоту. Для этого установите для свойства Size значение 550, 550 или перетащите угол формы, чтобы требуемый размер отобразился в правом нижнем углу интегрированной среды разработки (IDE).
Откройте панель элементов, выбрав вкладку Панель элементов в левой части интегрированной среды разработки.
Перетащите элемент управления TableLayoutPanel из категории Контейнеры панели элементов, а затем установите для него следующие свойства.
Задайте для свойства BackColor значение CornflowerBlue. Для этого откройте диалоговое окно BackColor, щелкнув стрелку раскрывающегося списка рядом со свойством BackColor в окне Свойства. Затем перейдите на вкладку Веб в диалоговом окне BackColor, чтобы просмотреть список доступных имен цветов.
Цвета упорядочены не по алфавиту, и цвет CornflowerBlue находится в нижней части списка.
Задайте для свойства Dock значение Fill, нажав кнопку раскрывающегося списка рядом со свойством и щелкнув большую среднюю кнопку. Таблица будет растянута по всей форме.
Для свойства CellBorderStyle установите значение Inset. Между ячейками поля появятся видимые границы.
Нажмите треугольную кнопку в правом верхнем углу элемента управления TableLayoutPanel для отображения меню задач этой панели.
В меню задач дважды щелкните Добавить строку для добавления двух дополнительных строк, а затем дважды щелкните Добавить столбец для добавления двух дополнительных столбцов.
В меню задач выберите команду Изменить строки и столбцы, чтобы открыть окно Стили столбцов и строк. Выберите каждый из столбцов, нажмите кнопку Процент и установите ширину каждого столбца равной 25 процентам от общей ширины. Затем в раскрывающемся списке в верхней части окна выберите Строки и задайте высоту каждой строки равной 25 процентам. По завершении нажмите кнопку ОК.
Теперь на панели макета таблицы должна быть видна сетка размером 4х4, состоящая из шестнадцати одинаковых по размеру квадратных ячеек. Эти строки и столбцы задают места, в которых позже появятся изображения значков.
Убедитесь, что TableLayoutPanel выбран в редакторе формы. На это будет указывать надпись tableLayoutPanel1 в верхней части окна Свойства. Если этот элемент управления не выбран, выберите элемент управления TableLayoutPanel в форме или в раскрывающемся списке в верхней части окна Свойства.
При выбранном элементе управления TableLayoutPanel откройте панель элементов и добавьте элемент управления Label (находится в категории Стандартные элементы управления) в левую верхнюю ячейку TableLayoutPanel. Теперь элемент управления Label должен быть выбран в интегрированной среде разработки. Задайте для него следующие свойства.
Убедитесь, что свойство BackColor имеет значение CornflowerBlue.
Задайте свойству AutoSize значение False.
Задайте для свойства Dock значение Fill.
Задайте для свойства TextAlign значение MiddleCenter, нажав кнопку раскрывающегося списка рядом со свойством, а затем щелкнув среднюю кнопку. Это необходимо, чтобы значок отображался в середине ячейки.
Выберите свойство Font. Должна появиться кнопка с многоточием (…).
Нажмите кнопку с многоточием и установите для параметра Font значение Webdings, для параметра Font Style — значение Bold, а для параметра Size — значение 48.
Установите свойство Text равным букве с.
Теперь в левой верхней ячейке TableLayoutPanel должен располагаться черный квадрат на синем фоне, который выравнивается по центру.
Шрифт Webdings является шрифтом значков, который поставляется с операционной системой Windows. В вашей игре «Подбери пару!» игроку необходимо найти пары одинаковых значков, поэтому используйте этот шрифт для отображения значков. Вместо ввода буквы с в свойство Text попробуйте вводить разные буквы, чтобы увидеть, какие значки отображаются. Восклицательный знак соответствует пауку, прописная буква N — глазу, а запятая — перцу чили.
Выберите элемент управления Label и скопируйте его в следующую ячейку TableLayoutPanel. (Нажмите сочетание клавиш CTRL+C или в строке меню выберите Правка > Копировать.) Затем вставьте его. (Нажмите сочетание клавиш CTRL+V или в строке меню выберите Правка > Вставить.) Во второй ячейке элемента управления TableLayoutPanel появится копия первого элемента управления Label. Вставьте его снова, и в третьей ячейке появится еще один элемент управления Label. Продолжайте вставлять элементы управления Label, пока все ячейки не будут заполнены.
Если выполнить команду вставки слишком много раз, интегрированная среда разработки добавит новую строку в TableLayoutPanel, чтобы появилось место для добавления нового элемента управления Label. Можно выполнить откат. Чтобы удалить новую ячейку, нажмите сочетание клавиш CTRL+Z или в меню выберите Правка > Отменить.
Теперь ваша форма готова. Она будет выглядеть примерно так, как показано на рисунке ниже.
Исходная форма игры «Подбери пару!»
Windows Forms Как лучше представить таблицу?
Мне нужно в приложении Windows Forms представить результат работы программы в виде небольшой табличке, содержащей 2 столбца целых цифр. (строк порядка 10-20).
Это табличка должна располагаться прямо на форме.
Подскажите, как это лучше сделать?
Я думаю что можно сделать многострочный элемент TextBox. Или есть более эффективные способы?
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Как лучше разрабатывать приложения по модели MVC в Windows Forms?
Т.е я обязан отделить логику,данные и форму. Но мне нужна совместимость формы и логики. Т.е логика.
Как лучше представить таблицу в виде двумерного списка
Доброго времени суток. Смоделировать таблицу с помощью двумерного списка можно двумя способами.
Почему Windows Forms лучше чем WPF?
Windows Forms полагается на чистом Windows API. С помощью Windows Forms можно написать любую.
Что лучше Windows Forms или WPF?
Доброго времени суток! подскажите те кто имеет опыт чем отличается приложение WPF от Windows Forms.
я вот думаю лучше через компонент DataGridView.
Добавлено через 57 секунд
Он как раз служить для представления данных в табличном виде.
Источник: windorez.ru
Создание собственного элемента на примере таблицы на C# для Windows Form
В данной статье я опишу создания своих элементов для C# Windows Form.
Для примера буду создавать таблицу со всем функционалом DataGridView. Позже перейдем на свои элементы. Создание первого элемента разобьем на несколько уроков. В данном уроке произведем от рисовку таблицы, а также: создание столбцов, строк, ячеек.
Для написания будем использовать .Net FrameWork 4.7.x, среда разработки Visual Studio 2019.
В первую очередь создадим обычный проект Windows Form. Думаю не нужно это показывать. А уже потом создаем проект «Библиотека элементов управления Windows Form»(Назовем его CustomControl).
Далее у нас будет создан файл UserControl.cs. Удаляем его и создаем обычный класс TableCustoms.cs.Наш класс будет наследоваться от класса Control.
Далее в этом же файле создадим еще несколько классов, а именно:Column,Row,Cell. Рассмотрим каждый по отдельности. Начнем с Column:
[Serializable] public class Column < public string Name < get; set; >= «NameColumn»;//Наименование Столбца public string Caption < get; set; >= «CaptionColumn»;//Текст заголовка public int Width < get; set; >= 100;//Стандартная ширина public Color Back < get; set; >= Color.White;//Цвет фона public Column() < >>
[Serializable] public class Row < public int Heigth < get; set; >= 20;// Высота строки public List Cells < get; set; >= new List();//список ячеек public Row() < >public Row(List cells) < Cells = cells; >>
Класс Cell(Для поддержки копирования добавляем интерфейс ICloneable):
[Serializable] public class Cell : ICloneable < public object Value < get; set; >= null;//значение ячейки public Cell() < >public object Clone() < return MemberwiseClone(); >>
Теперь настроим наш основной класс TableCustoms:
public class TableCustoms : Control < #region Перемененные public ObservableCollectionColumns < get; set; >= new ObservableCollection();//Список столбцов таблицы private ObservableCollection rows = new ObservableCollection();//Список строк private int countRow = 0;//количество строк #endregion #region Свойства public int CountRow // гетер и сетер при увеличении переменной на N раз < get < return countRow; >set < //При увеличении добавляем if (value >countRow) < int iteration = value — countRow; for (int i = 0; i < iteration; i++) < rows.Add(new Row()); >> //при уменьшении удаляем с конца if (value < countRow) < int iteration = countRow — value; for (int i = 0; i < iteration; i++) < rows.Remove(rows[rows.Count — 1]); >> countRow = value; > > //гетер и сетер для списка строк, будет использоваться позже public ObservableCollection Rows < get < return rows; >set < >> public int ColumnHeaderHeigth < get; set; >= 20;//высота шапки таблицы public int RowHeaderWidth < get; set; >= 20;//высота заголовков строк public Color ColumnHeaderBack < get; set; >= SystemColors.Control;//Основной цвет фона заголовков таблицы public Color BorderColor < get; set; >= Color.Black;//Стандартный цвет границ таблицы public bool NumerableRows < get; set; >= false;//Флаг автоматической нумерации #endregion //Метода изменения столбцов, будет использоваться в следующем уроке private void EditColumn() < >//Метод изменения строк private void EditRows() < if (countRow < rows.Count)//Увеличение количества строк < rows[rows.Count — 1].Cells = CreatCells(Columns.Count);//Добавление пустых ячеек в строку countRow++; >if (CountRow > rows.Count)//уменьшение количества строк < countRow—; >> //метод создания N количества ячеек private List CreatCells(int Count) < // return Enumerable.Repeat(new Cell(), Count).ToList(); Listresult = new List(); for (int i = 0; i < Count; i++) < result.Add(new Cell()); >return result; > public TableCustoms() < rows.CollectionChanged += (e, v) =>EditRows();//проверка изменения списка Columns.CollectionChanged += (e, v) => EditColumn();//проверка изменения списка BackColor = SystemColors.AppWorkspace;//Стандартный фон PanelTable panelTable = new PanelTable(this);//Создание основной панели panelTable.Dock = DockStyle.Fill;//Растягиваем основную панель по Control Controls.Add(panelTable);//Добавление панели на Control > >
Для того, чтобы у нас были полосы прокрутки нужно использовать ScrollableControl, поэтому создадим класс PanelTable наследуем ScrollableControl и помещаем его на Control(в следующем уроке объясню почему создаем два разных контрола, а не используем сразу ScrollableControl):
internal class PanelTable : ScrollableControl//Control со ScrolLbar < private TableCustoms BParent;//переменная основного класса, для работы с свойствами public PanelTable(TableCustoms bParent) < HScroll = true;//Отображение ползунка по горизонтали VScroll = true;//Отображение ползунка по вертикали AutoScroll = true;//Автоматическое появление полос прокрутки BParent = bParent; >//переопределение метода protected override void OnPaint(PaintEventArgs e) < Matrix m = new Matrix(); m.Translate(this.AutoScrollPosition.X, this.AutoScrollPosition.Y, MatrixOrder.Append); e.Graphics.Transform = m; Graphics graf = e.Graphics; int maxWidth = 0;//Высота AutoScrollMinSize int maxHeight = 0;//Ширина AutoScrollMinSize //расчитываем ширину foreach (Column item in BParent.Columns) < maxWidth += item.Width; >//расчитываем высоту foreach (Row item in BParent.Rows) < maxHeight += item.Heigth; >AutoScrollMinSize = new Size(maxWidth + 100, maxHeight + 100);//назначаем AutoScrollMinSize относительно этого будут появляться полосы прокрутки graf.Clear(BParent.BackColor); DrawHeaderColumns(graf);//Отрисовка заголовков столбцов таблицы DrawHeaderRows(graf);//Отрисовка заголовков строк таблицы DrawCells(graf);//Отрисовка ячеек base.OnPaint(e); > /// /// Отрисока заголовков столбцов /// /// private void DrawHeaderColumns(Graphics graf) < int x = 2; Rectangle rect; rect = new Rectangle(x, 1, BParent.RowHeaderWidth, BParent.ColumnHeaderHeigth); graf.DrawRectangle(new Pen(BParent.BorderColor), rect); graf.FillRectangle(new SolidBrush(BParent.ColumnHeaderBack), rect); x += BParent.RowHeaderWidth + 1; foreach (Column item in BParent.Columns) < rect = new Rectangle(x, 1, item.Width, BParent.ColumnHeaderHeigth); graf.DrawRectangle(new Pen(BParent.BorderColor), rect); graf.FillRectangle(new SolidBrush(BParent.ColumnHeaderBack), rect); if (item.Caption.Length != 0) < StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; graf.DrawString(item.Caption, new Font(«Times», 9), Brushes.Black, rect, sf); >x += item.Width + 1; > > //Отрисовка заголовков строк private void DrawHeaderRows(Graphics graf) < int y = 1; int i = 0; Rectangle rect; y += BParent.RowHeaderWidth + 1; foreach (Row item in BParent.Rows) < rect = new Rectangle(2, y, BParent.RowHeaderWidth, item.Heigth); graf.DrawRectangle(new Pen(BParent.BorderColor), rect); graf.FillRectangle(new SolidBrush(BParent.ColumnHeaderBack), rect); if (BParent.NumerableRows) < StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; graf.DrawString(i.ToString(), new Font(«Times», 9), Brushes.Black, rect, sf); >i++; y += item.Heigth + 1; > > //отрисовка ячеек private void DrawCells(Graphics graf) < int x = 2 + BParent.RowHeaderWidth + 1; int y = 2 + BParent.ColumnHeaderHeigth; Rectangle rect; int i = 0; foreach (Row itemRow in BParent.Rows) < foreach (Column itemColumn in BParent.Columns) < rect = new Rectangle(x, y, itemColumn.Width, itemRow.Heigth); graf.DrawRectangle(new Pen(BParent.BorderColor), rect); graf.FillRectangle(new SolidBrush(Color.White), rect); if (itemRow.Cells[i].Value != null) < StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; graf.DrawString(itemRow.Cells[i].Value.ToString(), new Font(«Times», 9), Brushes.Black, rect, sf); >x += itemColumn.Width + 1; i++; > i = 0; y += itemRow.Heigth + 1; x = 2 + BParent.RowHeaderWidth + 1; > > >
После этого «Пересобираем проект» элемента и добавляем элемент на форму(в основном проекте):
Теперь проверим некоторые методы нашего элемента:
public partial class Form1 : Form < public Form1() < InitializeComponent(); tableCustoms1.Rows.Add(new Row());//добавление строки tableCustoms1.Rows.Add(new Row()); tableCustoms1.Rows[0].Cells[0].Value = «1»;//Изменение значения ячейки tableCustoms1.Rows[1].Cells[1].Value = «2»; tableCustoms1.CountRow++;//увеличение числа строк tableCustoms1.Rows[0].Cells[0].Value = «привет»; >>
Источник: habr.com