- •В ведение в ado.Net
- •Потребитель данных
- •Поставщики данных
- •Источник данных — xml-файл
- •Элементы управления на форме Меню
- •Как устроены планки меню, статуса и панелей инструментов
- •Планка инструментов (ToolStrip)
- •Навигатор связей
- •Контейнер, расщепляющий форму
- •Создание таблиц и внедрение их в DataSet
- •Пояснения
- •Запись и чтение данных
- •Отображение данных связанной таблицы
- •Добавляем ограничение
- •Вторая, подчиненная таблица
- •Автоматическая навигация по записям связанной таблицы
- •Элемент управления BindingNavigator
- •Реакции на события в DataTable
- •Канонизация имен студентов
- •Вычисляемые колонки DataTable (Expression-Based DataColumn Objects)
- •Поиск в таблице DataTable и в компоненте DataGridView
- •Коррекция пользовательского интерфейса
- •Результат поиска
- •Поиск в DataGridView
- •Отбор данных из DataTable и отображение их в ListView
- •Как легко вносятся ошибки
- •Образ таблицы DataView
- •Методы Find и FindRows класса DataView
- •Задание
- •Элемент управления, который позволяет управлять отображением колонок DataGridView
Элемент управления, который позволяет управлять отображением колонок DataGridView
Ниже следует код элемента управления, который вы можете привинтить к любому объекту DataGridView. Включение функциональности ColumnSelector выполняется следующим (изящным) способом.
new ColumnSelector(gridExam, 110, 100); // 110 - ширина, а 100 – ограничитель высоты выпадающего меню со списком колонок
Объект ColumnSelector прикрепляется к любому объекту DataGridView и позволяет скрывать или показывать его колонки, с помощью выпадающего меню (объекта класса ToolStripDropDown). Код класса ColumnSelector настолько прозрачен, что не требует особых пояснений, но он потребует вашего анализа.
public class ColumnSelector
{
DataGridView grid = null; // Объект DataGridView, к которому прикрепляется ColumnSelector
CheckedListBox checkedListBox; // Список колонок, выводимый в виде меню
ToolStripDropDown popupMenu; // Объект, который поглощает CheckedListBox
int maxHeight, width; // Ограничитель высоты и ширина списка
public DataGridView Grid
{
get { return grid; }
set
{
if (grid != null)
grid.CellMouseClick -= new DataGridViewCellMouseEventHandler(grid_CellMouseClick);
grid = value;
if (grid != null)
grid.CellMouseClick += new DataGridViewCellMouseEventHandler(grid_CellMouseClick);
}
}
public int MaxHeight
{
get { return maxHeight; }
set
{
maxHeight = 300;
if (100 <= value && value <= 300)
maxHeight = value;
}
}
public int Width
{
get { return width; }
set
{
width = 100;
if (100 <= value && value <= 300)
width = value;
}
}
// Конструктор создает вложенные объекты: CheckedListBox и ToolStripDropDown
// CheckedListBox вкладывается в ToolStripControlHost, который в свою очередь вкладывается в ToolStripDropDown.
public ColumnSelector()
{
checkedListBox = new CheckedListBox();
checkedListBox.CheckOnClick = true;
checkedListBox.ItemCheck += (s, e) => grid.Columns[e.Index].Visible = e.NewValue == CheckState.Checked;
ToolStripControlHost host = new ToolStripControlHost(checkedListBox);
host.Padding = Padding.Empty;
host.Margin = Padding.Empty;
host.AutoSize = false;
popupMenu = new ToolStripDropDown();
popupMenu.Padding = Padding.Empty;
popupMenu.Items.Add(host);
}
public ColumnSelector(DataGridView grid, int width, int height) : this()
{
Grid = grid; Width = width; MaxHeight = height;
}
// При вызове контекстного меню над ячейкой с координатами (–1, –1) (левая ячейка заголовка DataGridView) объект ToolStripDropDown
// выдает popup-окно, в которое мы поместитли CheckedListBox
void grid_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.Button == MouseButtons.Right && e.RowIndex == -1 && e.ColumnIndex == -1)
{
checkedListBox.Items.Clear();
foreach (DataGridViewColumn c in grid.Columns)
checkedListBox.Items.Add(c.HeaderText, c.Visible);
int h = checkedListBox.Items.Count * 16 + 7;
checkedListBox.Height = h < maxHeight ? h : maxHeight;
checkedListBox.Width = width;
popupMenu.Show(grid.PointToScreen(new Point(e.X, e.Y)));
}
}
}
