Перейти к содержимому

Как удалить последнюю строку в datagridview c

  • автор:

Как убрать пустое пространство после последней строки в datagridview c#?

Только не предлагайте, пожалуйста, перекрасить datagridview . Спасибо. В общем есть datagridview . У него выставленный мной размер и, соответственно, при отсутствии в нём записей — вместо записей пустое пространство: datagridview без записей При добавлении записей пустое пространство постепенно заполняется до появления полосы прокрутки: datagridview с записями без полосы прокрутки При появлении полосы прокрутки и последующей прокрутке до конца вниз, внизу остается серое пространство (не последняя строка, а пустое пространство): datagridview с полосой прокрутки Как от него избавиться? P. S. Переопределение размера таблицы тоже не подходит, потому что высота строк варьируется.

Отслеживать
задан 16 июн 2018 в 10:00
Simon Gerasimenko Simon Gerasimenko
133 2 2 серебряных знака 9 9 бронзовых знаков

datagridview выравнивает область прокрутки по верхней границе строчки, поэтому снизу оказывается пустое пространство. Не знаю как в WinForms, но в WPF есть настройка для этого

16 июн 2018 в 10:41
размеры нужно указывать относительно использованных шрифтов, а не от балды x = 100; y= 129
16 июн 2018 в 10:46
@DigitalCore размеры чего?
16 июн 2018 в 10:49

А уменьшить высоту блока datagridview не получится? Я имею ввиду, так чтобы высота была кратна высоте строки. Похожий вопрос в англоязычной ветке.

16 июн 2018 в 11:31
Выравнивание идет по верхней строке, а не по нижней.
16 июн 2018 в 11:39

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Как верно заметили Андрей NOP и @Alexander Petrov, DataGreedView в WinForms выравнивает строки грида по верхнему краю. Изменить такое поведение для стандартного контрола не получится.

Если высота строк зависит от контента ячеек, дальше можно не читать, какой-то адекватный результат можно получить в единичных случаях. В общем виде задача не имеет решения для стандартного контрола. Лучше поискать стороннее решение для WinForms или использовать WPF.

Один из вариантов подогнать высоту самого DataGreedView , однако это не всегда возможно, например если размер жестко регламентирован дизайном формы или на контроле использовано свойство Dock для автоматической подгонки высоты контрола под высоту контейнера, в котором он размещен.

Также есть возможность подогнать высоту строк и заголовка, если он есть, таким образом, чтобы свести к минимуму размер пустого пространства ниже последней строки. Для этого понадобятся следующие свойства:

  • Высота заголовка задается с помощью DataGreedView.ColumnHeadersHeight в связке с DataGridView.ColumnHeadersHeightSizeMode(тут нужно проследить, чтобы не был включён режим AutoSize).
  • Высоту строк можно задавать как индивидуально для каждой, например по размеру содержимого, так и для всех сразу. Для того чтобы задать базовый размер всех строк можно воспользоваться свойством DataGridView.RowTemplate и DataGridViewRow.Height соответственно, например dataGridView1.RowTemplate.Height = 30; . Шаблонная строка используется для установки начальных параметров всех остальных строк грида и не запрещает в дальнейшем менять их параметры.

Конечно, для того чтобы задать подходящие размеры придется немного посчитать. Например высоту пустой области под последней строкой можно посчитать так:

var allAvailableHeght = dataGridView1.ClientSize.Height; var rowAvailableHeght = allAvailableHeght - dataGridView1.ColumnHeadersHeight; var emptiSpaceHeight = rowAvailableHeght % dataGridView1.RowTemplate.Height; 

Дальше остается решить задачу оптимизации и по известным числам вывести оптимальные размеры строк и заголовка.

Если для строк выставлена автоматическая высота по содержимому или просто строки не одинаковой высоты, придется считать суммарную высоту отображаемых строк, например так:

var displayedRowsHeight = dataGridView1.Rows.Cast() .Where(r => r.Displayed) .Sum(r => r.Height); 

Тут тоже есть нюанс, эта высота может быть больше высоты доступной для строк, т.к. если строка отображается хотя бы на один пиксель, свойство Displayed будет истинным. Тогда, если вычесть полученную высоту отображенных строк из доступной, которую мы считали выше, отрицательное значение будет означать, что нижняя строка отображается не полностью.

Ну и всегда нужно учитывать еще один момент, если ваш дизайн жестко регламентирует все параметры грида, включая высоту строк и заголовков, то избавиться от пустого пространства ниже последней строки не перекрашивая фон грида не получится.

Использование строки элемента управления DataGridView, предназначенной для ввода новых данных, в Windows Forms

При использовании DataGridView для редактирования данных в приложении часто требуется предоставить пользователям возможность добавлять новые строки данных в хранилище данных. Элемент управления DataGridView поддерживает эту функцию, предоставляя строку для новых записей, которая всегда отображается как последняя строка. Она помечается звездочкой (*) в заголовке. В следующих разделах рассматриваются некоторые аспекты, которые следует учитывать при программировании с включенной строкой для новых записей.

Отображение строки для новых записей

Используйте свойство AllowUserToAddRows, чтобы указать, отображается ли строка для новых записей. Значение по умолчанию этого свойства равно true .

В случае привязки данных строка для новых записей будет отображаться, если свойство AllowUserToAddRows элемента управления и свойство источника данных IBindingList.AllowNew оба имеют значение true . Если одно из них имеет значение false , строка отображаться не будет.

Заполнение строки для новых записей данными по умолчанию

Когда пользователь выбирает строку для новых записей в качестве текущей строки, элемент управления DataGridView вызывает событие DefaultValuesNeeded.

Это событие предоставляет доступ к новому элементу DataGridViewRow и позволяет заполнять новую строку данными по умолчанию. Дополнительные сведения см. в статье Практическое руководство. Определение значений по умолчанию для новых строк элемента управления DataGridView в Windows Forms.

Коллекция строк

Строка для новых записей содержится в коллекции Rows элемента управления DataGridView, но ведет себя по-разному в двух отношениях:

  • Строку для новых записей невозможно удалить из коллекции Rows программным способом. При попытке такого удаления возникает исключение InvalidOperationException. Пользователь также не может удалить строку для новых записей. Метод DataGridViewRowCollection.Clear не удаляет эту строку из коллекции Rows.
  • После строки для новых записей невозможно добавить другие строки. При попытке возникает исключение InvalidOperationException. В результате строка для новых записей всегда является последней строкой в элементе управления DataGridView. Методы в DataGridViewRowCollection добавления строк (Add, AddCopy и AddCopies) вызывают методы вставки внутренним образом при наличии строки для новых записей.

Визуальная настройка строки для новых записей

Создаваемая для новых записей строка основывается на строке, указанной свойством RowTemplate. Все стили ячеек, которые не указаны для этой строки, наследуются от других свойств. Дополнительные сведения о наследовании стилей ячеек см. в разделе Стили ячеек элемента управления DataGridView в Windows Forms.

Начальные значения, отображаемые ячейками в строке для новых записей, извлекаются из свойства DefaultNewRowValue каждой ячейки. Для ячеек типа DataGridViewImageCell это свойство возвращает изображение заполнителя. В противном случае это свойство возвращается null . Это свойство можно переопределить, чтобы возвращать пользовательское значение. Однако эти начальные значения можно заменить обработчиком событий DefaultValuesNeeded, когда фокус переходит в строку для новых записей.

Стандартные значки для заголовка этой строки (стрелка или звездочка), не являются общедоступными. Чтобы настроить значки, необходимо создать пользовательский класс DataGridViewRowHeaderCell.

Стандартные значки используют свойство ForeColor элемента DataGridViewCellStyle, используемого ячейкой заголовка строки. Стандартные значки не отрисовываются, если для их полного отображения недостаточно места.

Если в ячейке заголовка строки задано строковое значение, и если для текста и значка недостаточно места, сначала удаляется значок.

Сортировка

В не привязанном режиме новые записи всегда будут добавляться в конец DataGridView, даже если пользователь отсортировал содержимое DataGridView. Пользователю потребуется снова применить сортировку, чтобы отсортировать строку в нужное положение. Это поведение аналогично поведению элемента управления ListView.

В режиме привязки к данными и виртуальном режиме поведение вставки при применении сортировки будет зависеть от реализации модели данных. В ADO.NET строка немедленно сортируется в правильное положение.

Другие примечания о строке для новых записей

Свойству Visible этой строки невозможно задать значение false . При попытке возникает исключение InvalidOperationException.

Строка для новых записей всегда создается в невыбранном состоянии.

Виртуальный режим

При реализации виртуального режима необходимо отслеживать моменты, когда в модели данных требуется строка для новых записей, и когда нужно откатить добавление строки. Точная реализация этой функции зависит от реализации модели данных и ее семантики транзакций, например, от того, находится ли область фиксации на уровне ячейки или строки. Дополнительные сведения см. в статье Виртуальный режим для элемента управления DataGridView в Windows Forms.

См. также

  • DataGridView
  • DataGridView.DefaultValuesNeeded
  • Ввод данных с помощью элемента управления DataGridView в Windows Forms
  • Практическое руководство. Определение значений по умолчанию для новых строк элемента управления DataGridView в Windows Forms

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Как удалить последнюю строку в datagridview c

DataGridView — стандартный GUI компонент для отображения и редактирования таблиц. Здесь коротко рассмотрены основные моменты работы с этим классом.

Перекиньте стандартным способом в форму компонент DataGridView.

DataGridView-adding.png

Источник данных при создании можно не указывать, так как DataGridView позволяет хранить данные внутри себя и добавлять/удалять их на лету, во время выполнения (runtime). После этого редактором свойств настройте поведение по умолчанию нового экземпляра DataGridView. Я обычно меняю свойства AllowUserToAddRows на false, AllowUserToDeleteRows на false, ReadOnly на true. Можно также переименовать экземпляр из dataGridView1 в что-нибудь более осмысленное, подходящее для Вашей программы.

Добавление строк и столбцов. Столбцы и строки можно добавлять во время выполнения программы (подробнее см. [1]). Пример добавления строк:

dataGridView1->Rows->Add();

Однако если назначение и структура таблицы (количество и наименование столбцов) известны заранее, то можно редактором свойств добавить столбцы. Для этого редактируют свойство Columns.

DataGridView-edit-columns.png

Стиль текста заголовка. Пример, как можно установить жирный шрифт в заголовке таблицы:

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];

Текущая строка помечена в таблице треугольничком:

DataGridView-current-row.png

// Необязательный шаг: отмена выделения текущей ячейки,
// чтобы она не подкрашивалась: dataGridView1->CurrentCell->Selected = false;

Вид таблицы после отмены выделения текущей ячейки:

DataGridView current cell remove selection

Изменение данных в ячейках. Менять данные в ячейках таблицы можно только тогда, когда существуют соответствующий столбец и соответствующая строка, иначе произойдет ошибка выполнения («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; .

dataGridView Cells Style ForeColor

Пример изменения шрифта ячейки на жирный:

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 этих типов.

DataGridView Column Name

Клик на заголовке строки. Обработка клика на заголовке строки на C#:

private void dataGridView1_RowHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)

Как удалить последнюю пустую строку?

DataGridView last empty row

Ответ: после манипуляции со строками и добавления новых строк установите в false свойство AllowUserToAddRows :

dataGridView1.AllowUserToAddRows = false;

1. Все о DataGridView. Учебник site:datagridview.narod.ru.
2. C#: экспорт/импорт DataGridView в XML и HTML.

Практическое руководство. Сокрытие столбцов элемента управления DataGridView в Windows Forms

Иногда требуется показать только некоторые из столбцов, доступных в элементе управления DataGridView Windows Forms. Например, руководителям может потребоваться показать столбец с заработной платой сотрудников, в то время как от других пользователей его нужно скрыть. Или может возникнуть необходимость привязать элемент управления к источнику данных, содержащему много столбцов, только часть из которых нужно показать. В этом случае столбцы, которые не следует показывать, обычно не скрываются, а удаляются.

В элементе управления DataGridView значение свойства Visible столбца определяет, будет ли этот столбец показан.

Как скрыть столбец программным образом

  • Установите свойство DataGridViewColumn.Visible в значение false . Чтобы скрыть столбец CustomerID , создаваемый автоматически во время привязки к данным, поместите приведенный ниже пример кода в обработчик событий DataBindingComplete.
this.dataGridView1.Columns["CustomerID"].Visible = false; 
Me.dataGridView1.Columns("CustomerID").Visible = False 

Компиляция кода

Для этого примера требуются:

  • элемент управления DataGridView с именем dataGridView1 , содержащий столбец с именем CustomerID ;
  • ссылки на сборки System и System.Windows.Forms.

См. также

  • DataGridView
  • DataGridViewColumn.Visible
  • Базовые характеристики столбцов, строк и ячеек элемента управления DataGridView в Windows Forms
  • Практическое руководство. Удаление автоматически сгенерированных столбцов элемента управления DataGridView в Windows Forms
  • Практическое руководство. Изменение порядка столбцов элемента управления DataGridView в Windows Forms

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *