2010-01-13 2 views
3

Я надеюсь, что кто-то столкнулся с таким же затруднительным положением, с которым я столкнулся. Я разрабатываю приложение .NET 2.0 Winforms и пытаюсь обменять объект данных ADO.NET между двумя разными winforms.Передача объектов между объектами winform

У меня есть кнопка в форме1, которая при нажатии на нее создает экземпляр другого объекта формы и показывает его модально. Вторая модальная форма позволяет пользователю выполнять некоторые критерии поиска и возвращать данные результатов поиска ado.net.

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

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

Насколько я понимаю, когда вы передаете объект в качестве параметра в функцию или конструктор, вы находитесь в режиме «по ссылке», и вы управляете исходным содержимым объекта? Но это не то, что, кажется, происходит здесь. Любое понимание было бы высоко оценено.

благодарит заранее.

// button click handler code in Form1 
DataTable searchResults = new DataTable(); 
Search searchForm = new Search(this.DropdownDataset, searchResults); 
searchForm.ShowDialog(this); 

// custom winform constructor code in Form2 
    public Search(DataSet dropdownData, DataTable searchResults) 
    { 
     this.InitializeComponent(); 
     this._dropdownData = dropdownData; 
     this._lidSearch = new LIDSearch(); 
     this._searchResults = searchResults; 
    } 

ответ

1

Вам необходимо использовать this._searchResults.merge (searchResults);

+0

Это было !!!! Большое спасибо, Wade73! Вы, ребята, рок! :) –

+0

Не могли бы вы отметить как ответ? Благодарю. – Wade73

+0

Еще немного нового в stackoverflow, спасибо за напоминание ... просто отметили его как ответ от вас, спасибо ... –

1

Passing by reference isn't quite the same as passing a reference by value, но в данном случае я не думаю, что вам нужно беспокоиться об этом.

Вы не показали, как вы пытаетесь «получить» результаты поиска впоследствии. Пока это выглядит хорошо, но если вы могли бы показать часть «назад», которая поможет. Короткий, но полный пример (например, просто добавление фиктивной записи в DataTable) поможет еще больше.

+1

В дополнение к ответу Джона, вы должны убедиться, что вы не переназначаете ссылку DataTable на другой объект в процессе (т.е. изменение таблицы данных не должно означать создание новой таблицы с измененным содержимым, таким как 'this. _searchResults = new DataTable() ') –

+0

@ Wade73: Нет, объекты не передаются * вообще *; параметры ссылочного типа и параметры типа значения всегда передаются по значению по умолчанию. Пожалуйста, прочитайте ссылку в моем ответе. –

+1

+1 для исправления дурака. Я извиняюсь за то, что ошибаюсь (посмотрел ответ на Google), но когда-то я думал, что нашел информацию о том, что это было поведение в .Net – Wade73

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