2010-01-31 4 views
4

У меня есть форма с сеткой, и я хочу передать информацию из первой формы во вторую, в зависимости от того, какая строка выбрана, когда пользователь нажимает кнопку редактирования.Пошаговые данные из одной формы в другую

Каков наилучший способ? и как я должен решить, как форма должна быть пустой, если пользователь хочет добавить новую или заполнить вторую (правую) форму со значениями из выбранной строки первого типа datagrid? Значения строк - это все свойства одного и того же объекта.

Я могу удалить и добавить новый объект, его редактирование существующего, с которым мне сложно, и как мне загрузить вторую форму?

В настоящее время я создаю экземпляр и экземпляр instance.Show();

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

+0

Веб-форма или форма Windows или форма WPF? – abmv

+0

Windows Form, настольное приложение. – Alex

ответ

1

Скажем, ваша форма1 представляет собой форму с сеткой данных (grdMyData), которая отображает строки экземпляров класса MyClass, а form2 - это форма для редактирования данных данной строки. Когда пользователь нажимает кнопку Edit, вы могли бы использовать это:

private void btnEdit_Click(sender e, EventArgs arg) 
{ 
    if (grdMyData.SelectedRows.Count == 0) 
     return; //nothing to do 

    MyClass selectedRow = (MyClass)grdMyData.SelectedRows[0].DataBoundItem; 
    Form2 frm2 = new Form2(selectedRow); 
    if (frm2.ShowDialog() == DialogResult.OK) 
    { 
     //do something if needed 
    } 
} 

Этот код если у вас есть правильный конструктор Form2, который принимает тип объекта, он работает с. При этом, когда вы работаете в Form2, данные автоматически влияют на отображение Form1, потому что они работают с экземпляром того же объекта.

+0

Спасибо, я, наконец, понял, что нужно сделать другой конструктор с объектом в качестве параметра. такое простое решение, смотрящее прямо на меня. – Alex

0

Я предлагаю , подвергая событие в той же форме, что и другая форма.

Вот Offical учебник
http://msdn.microsoft.com/en-us/library/aa645739(VS.71).aspx

В принципе это было бы что-то вроде этого

// Source form 
public event YourEventHandlerType EventName; 

// Wherever the event occurs 
EventName.Invoke(...); 

// Destination form 
this.referenceToSourceForm.EventName += MyEventHandler(...); 

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

Смежные вопросы