Windows forms строки нельзя программным способом добавить в коллекцию
Использование строки элемента управления DataGridView, предназначенной для ввода новых данных, в Windows Forms Using the Row for New Records in the Windows Forms DataGridView Control
При использовании DataGridView для редактирования данных в приложении часто требуется предоставить пользователям возможность добавлять новые строки данных в хранилище данных. When you use a DataGridView for editing data in your application, you will often want to give your users the ability to add new rows of data to the data store. DataGridViewЭлемент управления поддерживает эту функцию, предоставляя строку для новых записей, которая всегда отображается как последняя строка. The DataGridView control supports this functionality by providing a row for new records, which is always shown as the last row. Он помечается символом звездочки (*) в заголовке строки. It is marked with an asterisk (*) symbol in its row header. В следующих разделах рассматриваются некоторые моменты, которые следует учитывать при программировании со строкой для включения новых записей. The following sections discuss some of the things you should consider when you program with the row for new records enabled.
Отображение строки для новых записей Displaying the Row for New Records
Заполнение строки для новых записей данными по умолчанию Populating the Row for New Records with Default Data
Когда пользователь выбирает строку для новых записей в качестве текущей строки, DataGridView элемент управления вызывает DefaultValuesNeeded событие. When the user selects the row for new records as the current row, the DataGridView control raises the DefaultValuesNeeded event.
Это событие предоставляет доступ к новому DataGridViewRow и позволяет заполнить новую строку данными по умолчанию. This event provides access to the new DataGridViewRow and enables you to populate the new row with default data. Дополнительные сведения см. в разделе как указать значения по умолчанию для новых строк в элементе управления Windows Forms DataGridView. For more information, see How to: Specify Default Values for New Rows in the Windows Forms DataGridView Control
Коллекция Rows The Rows Collection
Строка для новых записей содержится в DataGridView коллекции элемента управления, Rows но ведет себя по-разному в двух отношениях: The row for new records is contained in the DataGridView control’s Rows collection but behaves differently in two respects:
Строку для новых записей нельзя удалить из Rows коллекции программным способом. The row for new records cannot be removed from the Rows collection programmatically. InvalidOperationExceptionПри появлении попытки возникает исключение. An InvalidOperationException is thrown if this is attempted. Пользователь также не может удалить строку для новых записей. The user also cannot delete the row for new records. DataGridViewRowCollection.ClearМетод не удаляет эту строку из Rows коллекции. The DataGridViewRowCollection.Clear method does not remove this row from the Rows collection.
Визуальная настройка строки для новых записей Visual Customization of the Row for New Records
При создании строки для новых записей она основана на строке, заданной RowTemplate свойством. When the row for new records is created, it is based on the row specified by the RowTemplate property. Все стили ячеек, не указанные для этой строки, наследуются от других свойств. Any cell styles that are not specified for this row are inherited from other properties. Дополнительные сведения о наследовании стилей ячеек см. в разделе Стили ячеек в элементе управления Windows Forms DataGridView. For more information about cell style inheritance, see Cell Styles in the Windows Forms DataGridView Control.
Стандартные значки для заголовка этой строки, которые являются стрелками или звездочками, не предоставляются публично. The standard icons for this row’s header, which are an arrow or an asterisk, are not exposed publicly. Если вы хотите настроить значки, необходимо создать пользовательский DataGridViewRowHeaderCell класс. If you want to customize the icons, you will need to create a custom DataGridViewRowHeaderCell class.
Стандартные значки используют ForeColor свойство объекта, DataGridViewCellStyle используемого в ячейке заголовка строки. The standard icons use the ForeColor property of the DataGridViewCellStyle in use by the row header cell. Стандартные значки не отображаются, если недостаточно места для их полного отображения. The standard icons are not rendered if there is not enough space to display them completely.
Если в ячейке заголовка строки задано строковое значение, и если недостаточно места для текста и значка, значок удаляется первыми. If the row header cell has a string value set, and if there is not enough room for both the text and icon, the icon is dropped first.
Сортировка Sorting
В связанных с данными и виртуальных режимах поведение вставки при применении сортировки будет зависеть от реализации модели данных. In data bound and virtual modes, the insertion behavior when a sort is applied will be dependent on the implementation of the data model. Для ADO.NET строка немедленно сортируется в правильном положении. For ADO.NET, the row is immediately sorted into the correct position.
Другие примечания к строке для новых записей Other Notes on the Row for New Records
Строка для новых записей всегда создается в невыбранном состоянии. The row for new records is always created in the unselected state.
Виртуальный режим Virtual Mode
При реализации виртуального режима необходимо учитывать, когда в модели данных требуется строка для новых записей и когда необходимо выполнить откат добавления строки. If you are implementing virtual mode, you will need to track when a row for new records is needed in the data model and when to roll back the addition of the row. Точная реализация этой функции зависит от реализации модели данных и ее семантики транзакций, например от того, находится ли область фиксации на уровне ячейки или строки. The exact implementation of this functionality depends on the implementation of the data model and its transaction semantics, for example, whether commit scope is at the cell or row level. Дополнительные сведения см. в статье виртуальный режим в элементе управления Windows Forms DataGridView. For more information, see Virtual Mode in the Windows Forms DataGridView Control.
Добавление строк в DataGridView, который привязан к данным
Динамическое добавление и отображение строки в DataGridView, который привязан к List
При добавлении в список нового значения, dataGridView1.DataSource также обновляется, но не.
Добавление строк в datagridview, который привязан к данным
Здравствуйте, вот проблема: есть такая штука dataGridView1.DataSource = dtData; и теперь мне.
Добавление строк в DataGridView, если компонент привязан к данным
Выдаёт ошибку «Строки нельзя программным способом добавить в коллекцию строк DataGridView, если.
DataGridView. Нельзя программным способом добавить в коллекцию строк, если контрол привязан к данным
Нуждаюсь в помощи. Появляется ошибка «Строки нельзя программным способом добавить в коллекцию.
ДА. Можно и так делать
Это вопрос или утверждение?
Как это реализовано у меня:
1) Создается DataSet с нужными для работы DataTable (так называемая «отсоединенная копия»)
2) Для таблиц определяются адаптеры с запросами, для обмена данными с соответсвующими таблицами БД
3) DGV настраивается на отображение данных в определенном DataTable. При этом следует помнить, что dgv данные не хранит, а только отображает.
Это кратко, если нужно подробней, читай учебник по ADO.Net.
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
Строки нельзя добавить в коллекцию строк DataGridView, если элемент управления привязан к данным
Здравствуйте, столкнулся с такой проблемой, привязал datagridview к базе данных access. Теперь.
Как сортировать содержание dataGridView, который привязан к dataSet
Привет всем! как сортировать содержание dataGridView который привязан к dataSet// в таблице 3.
Отсортировать данные по одному из столбцов в DataGridView который привязан к DataTable
Мне необходимо отсортировать данные по одному из столбцов в DataGridView который привязан к.
Не добавляются строки в DGV, если он привязан к данным
Программировать начал не очень давно. И вот столкнулся с такой проблемой. На форме есть.
Строки не могут быть программно добавлены в коллекцию строк datagridview, если элемент управления привязан к данным
прежде всего, я посмотрел этот связанный вопрос в здесь но решение dataGridView1.Rows.Add() не работает в моем случае.
в моем Datagridview у меня есть 3 текстовых поля для ввода данных и 2 ComboBoxes для пользователя, чтобы выбрать значения (которые привязаны к базе данных). Одно из моих текстовых полей настроено только для чтения, чтобы пользователи могли заполнять его только за пределами datagrid (с обычным текстовым полем и кнопкой).
когда пользователи заполняют DataGridView данными, внизу всегда есть пустая строка; поэтому я отключил ее и использовал этот код, чтобы запретить пользователям добавлять новую строку внутри datagrid.
Я только хочу добавить новую строку, когда пользователи нажимают кнопку, о которой я упоминал выше (которая выдает ошибку).
сообщение об ошибке, которое я получил, было:
» строки не могут быть программно добавлены в коллекцию строк datagridview, когда элемент управления привязка к данным»
один с красной стрелкой-это ComboBox, а другой с зеленой стрелкой-текстовое поле только для чтения
5 ответов
похоже, что вы используете свойство DataSource объекта DataGridView. Когда это свойство используется для привязки к данным, нельзя явно добавлять строки непосредственно в DataGridView. Вместо этого необходимо добавить строки directy в источник данных.
например, если ваш источник данных является DataTable, используя DataTable, назначенный свойству DataSource (непроверенный):
затем добавьте новый DataRow и установите значения полей.
добавить новую строку с DataTable и принять изменения.
в C# это было бы что-то вроде этого:
после добавления новой строки, вы должны установить указатель строки в границе количества строк. Вы должны сделать эти шаги.
Сначала добавьте строку в DataGridView:
во-вторых, установите новый индекс строки в count-1:
затем, наконец, выберите значения элементов управления в нем:
и если источником вашего datagrid является datattable, вам нужно добавить строку в эту таблицу.Give new значения для вновь добавленной строки в таблице данных и, наконец, rebind datagrid с обновленным datatable.
проверьте, правильно ли вы установили индекс новой строки. Возможно, именно поэтому вы получаете эту ошибку.
Программное добавление элементов управления в Windows Forms во время выполнения с помощью Visual C#
Эта статья поможет программным способом добавлять и настраивать элементы управления в форме Windows Forms с помощью Visual C#.
Исходная версия продукта: Visual C #
Исходный номер статьи базы знаний: 319266
Сводка
В этой статье приведены пошаговые инструкции по добавлению и настройке нескольких часто используемых элементов управления в форме Windows Forms. В примере кода отсутствует обработка событий.
Требования
В этой статье предполагается, что вы знакомы со следующими разделами:
Создание приложения Windows Forms
Дважды щелкните Form1, чтобы создать и просмотреть Form1_Load процедуру обработки события.
Добавьте в класс переменные частных экземпляров Form1 для работы с общими элементами управления Windows. Form1 Класс запускается следующим образом:
Код должен быть изменен в Visual Studio. Когда вы создаете проект Windows Forms, Visual C# добавляет по умолчанию одну форму в проект. Эта форма называется Form1. Два файла, представляющие форму, называются Form1.CS и Form1.Designer.CS. Вы пишете свой код в Form1.CS. Файл Designer.CS — это место, в котором конструктор Windows Forms записывает код, который реализует все действия, выполненные путем добавления элементов управления. Дополнительные сведения о конструкторе Windows Forms в Visual C# приведены в статье Создание проекта (Visual c#).
Настройка свойств формы и элемента управления
Нахождение Form1_Load процедуры обработки события и добавление в процедуру следующего кода для настройки внешнего вида элемента управления формы:
Добавьте следующий код в Form1_Load процедуру обработки события для настройки внешнего вида элемента управления «Кнопка»:
Добавьте следующий код для настройки внешнего вида элемента управления TextBox в Form1_Load :
Добавьте следующий код для настройки внешнего вида элемента управления ListBox в Form1_Load :
Добавьте следующий код, чтобы настроить внешний вид элемента управления CheckBox в Form1_Load :
Добавьте следующий код, чтобы настроить внешний вид элемента управления Label в Form1_Load :
Добавление элементов управления в форму
Добавьте следующий код, чтобы добавить каждый объект в Controls массив формы в конце Form1_Load :
Проверка работы
Ссылки
Ответы на 7 самых частых вопросов по WinForms
Ответы на 7 самых частых вопроса по WinForms
1. Как создать вторую форму
Любая форма представляет из себя класс, унаследованный от Form.
Экземпляр главной формы создается в файле Program.cs по умолчанию.
При этом ShowDialog() блокирует главную форму, т.е. управление вернется в нее, только по закрытию второй формы, а Show() просто отображает вторую форму, т.е. будут доступны обе формы.
2. Как передать данные из одной формы в другую
Часто возникает необходимость передать данные из одной формы в другую, я придумал 7 способов, у каждого свои недостатки и достоинства.
2.1 Изменение модификатора доступа (добавлено 24 июля 2017: лучше воздержаться от применения данного способа)
В Form2 Установить модификатор доступа для контрола/поля public
В любом месте Form1
+ Самый быстрый в реализации и удобный способ
— Противоречит всем основам ООП
— Возможна передача только из более поздней формы в более раннюю
— Форма f показывается только с использованием ShowDialog(), т.е. в первую форму управление вернется только по закрытию второй. Избежать этого можно, сохранив ссылку на вторую форму в поле первой формы
2.2 Использование открытого свойства/метода. Способ очень похож на первый
В классе Form2 определяем свойство (или метод)
+ Противоречит не всем основам ООП
— Минусы те же
2.3 Передача данных в конструктор Form2
Изменяем конструктор Form2
+ Простой в реализации способ
+ Не нарушает ООП
— Возможна передача только из более ранней формы в более позднюю
2.4 Передача ссылки в конструктор
Изменяем конструктор Form2
+ Доступ ко всем открытым полям/функциям первой формы
+ Передача данных возможна в обе стороны
— Нарушает ООП
2.5 Используем свойство ‘родитель’
При создании второй формы устанавливаем владельца
+ Доступ ко всем открытым полям/функциям первой формы
+ Передача данных возможна в обе стороны
+ Не нарушает ООП
2.6 Используем отдельный класс
Создаем отдельный класс, лучше статический, в основном namespace, т.е. например в файле Program.cs
+ Самый удобный способ, когда данные активно используются несколькими формами.
2.7 Использование функций обратного вызова
2.7.1 Передача метода в конструктор
Создаем в основном namespace делегат
Непонятен пункт 2.5 из «Ответы на 7 самых частых вопросов по WinForms»
Вопрос по пункту 2.5 из «Ответы на 7 самых частых вопроса по WinForms». Вот код: // в форме 1.
Ответы на 7 самых частых вопросов по Windows Forms, C++/CLI Edition
Ответы на 7 самых частых вопросов по Windows Forms C++/CLI Edition Эта статья является.
Список Ваших вопросов Платону Щукину и его ответы
Данная тема будет предназначана для публикования Ваших вопросов и ответов с службой поддержки.
+ Наиболее гибкий способ передачи данных
— Сложен в реализации и понимании
3. Как получить доступ к контролу из другого потока
С элементами управления можно работать только из того потока в котором они были созданы. При обращении из другого потока будет сгенерировано исключение InvalidOperationException с текстом «Cross-thread operation not valid: Control accessed from a thread other than the thread it was created on.» (Недопустимая операция в нескольких потоках: попытка доступа к элементу управления не из того потока, в котором он был создан.). Возможные решения:
3.1 Простой и неправильный способ
Отменяем проверку, из какого потока используется контрол
Для одного раза может и сработать, но делать так крайне не рекомендуется.