Как обновить данные объекта после редактирования ячейки DataGridView, когда DataGridView привязан к DataTable? - PullRequest
0 голосов
/ 29 мая 2020

первый плакат. Извините, если код, который я публикую, плохо отформатирован или трудно интерпретировать.

Я пытаюсь выяснить, как обновить данные свойств объекта, которые у меня есть в объекте класса «AnalogInput», расположенном в DataGridView, который имеет его DataSource свойство установлено в DataTable. Итак, после того, как я отредактирую ячейку в DataGridView, я хотел бы отправить это обновленное значение обратно в DataTable и, следовательно, значение свойства AnalogInput.

Я пытаюсь сделать это в приложении WinForms.

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

Создайте DataGridView для отображения некоторых выбранных и редактируемых свойств AnalogInput

DataGridView dataGridView_AnalogPoints = new dataGridView(); 

Создайте новый экземпляр объект класса «AnalogInput» со строковыми свойствами publi c, инициализированными, как показано ниже

AnalogInput point = new AnalogInput() { Name = "Something", Address = "2", Minimum = "-32768", Maximum = "32767"};

Создайте новый DataTable для хранения желаемых свойств объекта «AnalogInput»

DataTable analogPoints = new DataTable();

Добавить столбцы в DataTable

analogPoints.Columns.Add("Name");
analogPoints.Columns.Add("Address");
analogPoints.Columns.Add("Minimum");
analogPoints.Columns.Add("Maximum");

Добавить данные объекта в новую строку в DataTable analogPoints

analogPoints.Rows.Add(point.Name, point.Address, point.Minimum, point.Maximum);

Установить источник dataGridView.

dataGridView_AnalogPoints.DataSource = analogPoints;

Итак, как только я редактирую ячейку DataGridView, содержащую данные объекта из DataSource, как DataTable, которая получает данные из объекта AnalogInput, как я могу обновить i t к вновь введенному значению из DataGridView? Мне кажется, что я очень далек от этого.

У меня всего около 9 месяцев опыта работы с C# и WinForms, поэтому прошу прощения, если мой код выглядит запутанным. Я также не уверен, что мне нужно специально искать, чтобы решить эту проблему.

1 Ответ

0 голосов
/ 03 июня 2020

Я не думаю, что вы очень далеки от достижения задуманного. В классе DataGridView есть замечательное событие под названием CellValueChanged. Если вы не знаете, что такое события, подумайте о них как о случае, который, по мнению разработчика, может произойти (например, изменение значения, нажатие на элемент управления, наведение курсора мыши и т. Д. c.), Которые он / она хочет разрешить вам подписывать методы вызывается всякий раз, когда возникает случай. Что вы должны делать с sh, так это запускать функцию всякий раз, когда значение ячейки было изменено. Чтобы подписать метод на событие, вам необходимо написать следующую строку кода:

objectInstanceName.EventName += MethodName; // subscribes a method to be invoked when event occurs

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

objectInstanceName.EventName -= MethodName; // unsubscribes a method to cancel it from being invoked when event occurs

Вы также можете подписаться на столько методов, сколько вы sh для события. Обратите внимание, что каждое событие ожидает, что методы, на которые оно подписано, будут иметь указанный тип возвращаемого значения, количество параметров и их тип (они задаются объектом, называемым делегатом).

Чтобы создать метод, который соответствует ожидаемому Тип возвращаемого значения и параметры, вы можете дважды нажать TAB сразу после ввода + =, и Visual Studio автоматически сгенерирует для вас метод или напишет имя метода, а затем наведите на него указатель мыши, откройте меню предложений и нажмите «Создать метод» .

Событие CellValueChanged «хочет», чтобы его подписанные методы имели следующие параметры (их имена не имеют значения, важен их порядок и тип):

object sender, DataGridViewCellEventArgs e

Параметр отправитель - это объект, вызвавший вызов метода (т.е. ваш DataGridView), а e имеет тип DataGridViewCellEventArgs, который имеет некоторые свойства, которые будут вам очень полезны: RowIndex и ColumnIndex . Используя эти параметры, вы можете просто обновить значения своего DataTable, а также фактического экземпляра AnalogPoint, если вы назначили его какому-либо объекту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...