Visual Studio: как работать с DataGridView |
![]() |
Добавил(а) microsin |
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();
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. |