Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ADO Intro 1 Task.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
555.2 Кб
Скачать

Элемент управления, который позволяет управлять отображением колонок 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)));

}

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]