Поделиться через


Использование строки элемента управления 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.

См. также