Я думаю, что у вас есть мастер / деталь формы ситуации..NET Framework имеет много встроенных функций для решения подобных задач.Я действительно не понимаю деталей запроса, так что это может быть весьма полезно для вас.Я также предлагаю вам прочитать книгу или взять урок по связыванию данных, поскольку это сделает вашу жизнь намного проще, чем ручное обновление текстового поля с помощью текстового поля и перемещение данных вручную.
Часть A - Общий вид
Сначала создайте модель данных для представления каждой строки в вашей сетке данных.Из проводки я предположил следующую модель данных:
/// <summary>
/// Defines a Capteurs
/// </summary>
public class Capteurs : ICloneable
{
public Capteurs()
{
this.Name= string.Empty;
this.Marque= string.Empty;
this.Model= string.Empty;
this.Calibre= 0;
this.A= string.Empty;
this.B= string.Empty;
}
public Capteurs(Capteurs other)
{
this.Name = other.Name;
this.Marque = other.Marque;
this.Model = other.Model;
this.Calibre= other.Calibre;
this.A=other.A;
this.B=other.B;
}
public string Name { get; set; }
public string Marque { get; set; }
public string Model { get; set; }
public int Calibre { get; set; }
public string A { get; set; }
public string B { get; set; }
#region ICloneable Members
public Capteurs Clone() => new Capteurs(this);
object ICloneable.Clone() => Clone();
#endregion
}
Заметил, что я реализовал ICloneable
, чтобы делать копии данных, чтобы не мешать в основном списке, если я не хочу.
Затем я добавил источник данных в проект на основе этого класса
![add data source](https://i.stack.imgur.com/AVOeP.png)
В главной форме содержится DataGridView
, чтобы показать все данные, которыесвязан с источником данных
![data link](https://i.stack.imgur.com/2Z0df.png)
Теперь, когда форма загружается, я добавляю данные в источник данных с помощью capteursBindingSource.DataSource = list;
и в списке элементов отображаетсявверх в мастер-форме.
![master form](https://i.stack.imgur.com/7w5As.png)
Добавьте следующие свойства в мастер-форму, чтобы иметь доступ к выбранному в данный момент элементу, менеджеру списка,список элементов и индекс текущего элемента.
public Capteurs Current
{
get => List[Index];
set => List[Index] = value;
}
public CurrencyManager CurrencyManager
{
get => BindingContext[capteursBindingSource] as CurrencyManager;
}
public IList<Capteurs> List
{
get => capteursBindingSource.DataSource as IList<Capteurs>;
}
public int Index
{
get => BindingContext[capteursBindingSource].Position;
set => BindingContext[capteursBindingSource].Position = value;
}
Часть B - Подробный вид
Создайте вторую форму и перетащите источник данных на поверхность формы
![data as details](https://i.stack.imgur.com/REukD.png)
![drag and drop](https://i.stack.imgur.com/ApTIV.png)
Удалить позиционирование вolbar (поскольку вы одновременно отображаете только один набор данных).Организуйте элементы управления, которые создаются, и добавьте кнопки для OK / Отмена или Принять / Закрыть или что-то, чтобы указать, хороши ли изменения или нет.
![detail form](https://i.stack.imgur.com/CyQk0.png)
Наконец, добавьте следующее свойство, чтобы получить или установить данные, которые должны отображаться в форме
public Capteurs Current
{
get => BindingContext[capteursBindingSource].Current as Capteurs;
set => capteursBindingSource.DataSource = new Capteurs[] { value };
}
Часть C - Связывание форм
Все вышеперечисленное выполняется для того, чтобыупростить передачу данных между формами.В основной форме следующий обработчик кнопок открывает детальную форму, отправляет клон текущих данных, и если пользователь выбирает [Сохранить], отредактированные данные сохраняются обратно в основной список и сетка обновляется используя команду CurrencyManager.Refresh()
.
private void detailsButton_Click(object sender, EventArgs e)
{
var dlg = new DetaillForm();
dlg.Current = this.Current.Clone();
if (dlg.ShowDialog(this) == DialogResult.OK)
{
this.Current = dlg.Current;
CurrencyManager.Refresh();
}
}
![the final result](https://i.stack.imgur.com/M3WMi.png)