DataGridView - стандартный GUI компонент для отображения и редактирования таблиц. Здесь коротко рассмотрены основные моменты работы с этим классом.
Перекиньте стандартным способом в форму компонент DataGridView.
Источник данных при создании можно не указывать, так как DataGridView позволяет хранить данные внутри себя и добавлять/удалять их на лету, во время выполнения (runtime). После этого редактором свойств настройте поведение по умолчанию нового экземпляра DataGridView. Я обычно меняю свойства AllowUserToAddRows на false, AllowUserToDeleteRows на false, ReadOnly на true. Можно также переименовать экземпляр из dataGridView1 в что-нибудь более осмысленное, подходящее для Вашей программы.
Добавление строк и столбцов. Столбцы и строки можно добавлять во время выполнения программы (подробнее см. [1]). Пример добавления строк:
dataGridView1->Rows->Add();
Однако если назначение и структура таблицы (количество и наименование столбцов) известны заранее, то можно редактором свойств добавить столбцы. Для этого редактируют свойство Columns.
Стиль текста заголовка. Пример, как можно установить жирный шрифт в заголовке таблицы:
DataGridView dgv = 0 == tabControl1.SelectedIndex ? ОсновнойDGV : РезервDGV;
DataGridViewCellStyle style = dgv.ColumnHeadersDefaultCellStyle;
style.Font = new Font(style.Font, FontStyle.Bold); // Жирный текст
Как поменять цвет фона заголовка и цвет шрифта:
dgv.EnableHeadersVisualStyles = false;
dgv.ColumnHeadersDefaultCellStyle.BackColor = Color.Navy;
dgv.ColumnHeadersDefaultCellStyle.ForeColor = Color.White;
Работа с ячейками. Обращение к ячейкам DataGridView довольно простое. Индексация столбцов (Columns) и строк (Rows) идет относительно нуля. Столбец с индексом 0 самый левый, и строка с индексом 0 самая верхняя. Количество строк можно получить через свойство RowCount. Добавляются строки методом Удаляются строки методом Rows->Add(), удаляются методом Rows->RemoveAt(номер строки). Пример добавления и удаления строк:
// Добавим в dataGridView1 4 строки:
dataGridView1->Rows->Add();
dataGridView1->Rows->Add();
dataGridView1->Rows->Add();
dataGridView1->Rows->Add();
// Удалим все строки из dataGridView1:
while (0 != dataGridView1->RowCount)
dataGridView1->Rows->RemoveAt(0);
Более простой способ удаления строк:
dataGridView1->Rows->Clear();
Текущая строка. Узнать номер текущей строки можно через HitTestInfo->RowIndex:
int idx = dataGridView1->HitTestInfo->RowIndex;
Установить (поменять) текущую строку можно через свойство CurrentCell (в примере устанавливаем третью текущую строку):
int idx = 2;
dataGridView1->CurrentCell = dataGridView1->Rows[idx]->Cells[0];
Текущая строка помечена в таблице треугольничком:
// Необязательный шаг: отмена выделения текущей ячейки,
// чтобы она не подкрашивалась:
dataGridView1->CurrentCell->Selected = false;
Вид таблицы после отмены выделения текущей ячейки:
Изменение данных в ячейках. Менять данные в ячейках таблицы можно только тогда, когда существуют соответствующий столбец и соответствующая строка, иначе произойдет ошибка выполнения ("System.ArgumentOutOfRangeException" произошло в mscorlib.dll Дополнительные сведения: Индекс за пределами диапазона. Индекс должен быть положительным числом, a его размер не должен превышать размер коллекции.). После добавления строки методом Add все значения в ячейках добавленной строки будут пустые. К ячейке таблицы можно обращаться по номеру столбца и номеру строки через свойство Value.
Пример добавления строк и заполнения таблицы:
int i = 0; //нумерация строк начинается с 0
if ( (dataGridView1->RowCount - 1) < i )
dataGridView1->Rows->Add();
// № строки добавляем в первый столбец Cells[0]:
dataGridView1->Rows[i]->Cells[0]->Value = (i+1).ToString();
// Текст добавим во второй столбец Cells[1]:
dataGridView1->Rows[i]->Cells[1]->Value = "Текст в ячейке";
i++; //переходим к следующей строке
dataGridView1->Rows[i]->Cells[0]->Value = (i+1).ToString();
...
Стиль, цвет текста. Внешний вид текста в ячейке можно менять через свойство Style. Пример изменения цвета нужной ячейки на C#:
private void msgtable(string msg, Color textcolor)
{
dataGridView1.Rows[rowidx].Cells[2].Style.ForeColor = textcolor;
dataGridView1.Rows[rowidx].Cells[2].Value = msg;
}
...
case TCalibReport.ITERATE_OK:
msgtable("OK", Color.Green);
break;
...
Пример изменения шрифта ячейки на жирный:
Font font = new Font(DataGridView.DefaultFont, FontStyle.Bold);
dgv.Rows[ТекущаяСтрока].Cells[ТекущийСтолбец].Style.Font = font;
Как обращаться к столбцам не по их индексу, а по имени? Нумерация строк и столбцов начинается с нуля, и когда нам нужно обратиться к конкретной ячейке строки, то это можно сделать через числовой индекс: Rows[индексстроки].Cells[индексстолбца]. Однако есть удобная возможность получить индекс столбца по имени типа столбца:
dgv.Rows[ТекущаяСтрока].Cells[УровеньУст.Index].Value
= Установлено.ToString("F2", ci);
dgv.Rows[ТекущаяСтрока].Cells[УровеньСчит.Index].Value
= Считано.ToString("F2", ci);
В этом примере УровеньУст и УровеньСчит - типы столбцов, которые были установлены во время компиляции визуальным редактированием свойства Columns таблицы dgv. Используется свойство Index этих типов.
Клик на заголовке строки. Обработка клика на заголовке строки на C#:
private void dataGridView1_RowHeaderMouseDoubleClick(object sender,
DataGridViewCellMouseEventArgs e)
{
rowstart = e.RowIndex;
rowend = e.RowIndex;
DisableGUI();
bwCalibr.RunWorkerAsync();
}
Как удалить последнюю пустую строку?
Ответ: после манипуляции со строками и добавления новых строк установите в false свойство AllowUserToAddRows:
dataGridView1.AllowUserToAddRows = false;
[Ссылки]
1. Все о DataGridView. Учебник site:datagridview.narod.ru. 2. C#: экспорт/импорт DataGridView в XML и HTML. |
Комментарии
microsin: через свойство CurrentCell получите объект текущей ячейки, по её свойствам ColumnIndex и RowIndex узнайте её положение, после чего инкрементируйте или декрементируйте нужный индекс, и пользуйтесь свойством Item у DataGridView, чтобы переместить курсор в нужную позицию:
Me.DataGrid.CurrentCell = DataGridView1.Item(column, row).
RSS лента комментариев этой записи