Вам не нужно синхронизировать форму с текущей строкой. Вот для чего BindingSource
.
Когда вы делаете простую привязку к BindingSource
, то каждый раз, когда изменяется его текущий элемент, связанные элементы управления обновляются, и каждый раз, когда значения в связанных элементах управления меняются, базовые значения в связанном элементе обновляются. Когда вы выполняете сложное связывание (то есть привязанный элемент управления отображает список BindingSource
, а не только текущий элемент), изменение Position
в BindingSource
также изменит текущую позицию в связанном элементе управления, и наоборот. Поэтому в этом случае вы хотите связать элементы управления во второй форме, используя простое связывание, а DataGridView
- в первом, используя сложное связывание.
Единственное, что вам нужно сделать, это убедиться, что обе формы используют один и тот же BindingSource
. Когда вы делаете это, нажатие на новую строку в DataGridView
обновляет Position
на BindingSource
, и BindingSource
выталкивает значения из текущего связанного элемента во все элементы с простыми связями, которые привязан к нему.
Это легко сделать. Предполагая, что Form1
- это форма с DataGridView
, а Form2
- это форма с простыми элементами управления, сделайте следующее:
В форме 1:
private BindingSource Source = new BindingSource();
Form1_Load(object sender, EventArgs e)
{
// set Source's DataSource to your DataTable here.
mainDataGridView.DataSource = source;
// create DataGridView columns and their bindings here.
Form2 f2 = new Form2();
f2.TopMost = true;
f2.Source = Source;
f2.Show();
}
В форме 2:
public BindingSource Source { get; set; }
public void Form2_Load(object sender, EventArgs e)
{
idTextBox.DataBindings.Add("Text", Source, "id");
descriptionTextBox.DataBindings.Add("Text", Source, "description")
}