Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как скопировать данные из 1 грида в другой? Или из bindingsource в list (нужен совет 
:(
    Опции темы
St33l
Дата 31.8.2009, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 16.6.2007

Репутация: нет
Всего: нет



Очень нужна ваша помощь и совет, как лучше поступить.

Принцип такой: есть таблица с выбранными, допустим, товарами. И есть справочник товаров (он тянется из БД). Выглядит примерно так: основная форма, на ней таблица пустая. Вторая форма. Там комбобокс с наимнованием товара, под ним datagrid с его характеристиками. Необходимо, чтобы пользователь выбирал нужный товар, жал кнопку "добавить", форма 2 закрывается, а на первой форме в таблице появляется выбранный им товар. При этом как зеркало таблицы в памяти существует List с этими же выбранными товарами. В дальнейшем он будет использоваться для математических вычислений.

Как и что сейчас уже сделано: на второй форме создан datasource для таблицы (инфо из БД), bindingsource. И таблица, и комбобокс завязаны на биндинг.
На первой форме:
Код

List<Tovar> lstTovar = new List<Tovar>();
BindingSource lstTovarBindingSource = new BindingSource();
lstTovarBindingSource.DataSource = lstTovar;
//датасоурс для DataGridView
dgvTovar.DataSource = lstTovarBindingSource;


А теперь вопрос, как реализовать это самое копирование? И как правильно это делать?
Я правильно понимаю, что нужно копировать из биндинга второго (который на 2 форме) в биндинг первый? Или нужно из второго в лист копировать? Как правильно, чтобы данные в list и таблице были синхронизированны?
PM   Вверх
HellMasterHaiL
Дата 3.9.2009, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 9.8.2006
Где: Россия, МО, г. Юб илейный

Репутация: нет
Всего: 1



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

На второй форме создаешь событие, которое возвращает запись (DataRow) для таблицы первой формы (на сколько понимаю структура данных (колво и наименование столбцов) твоих товаров одинаковая).
На первой форме это событие отлавливаешь и в датасетесоздаешь запись, возвращаемую событием.
Примерно:


Код

'описываем вторую форму
Private WithEvents Form2 as Form2

'открываем ее как обычно
...

'ловим событие выбора продукта
Private Sub test (ByVal rw as DataRow) Handles Form2.SelectProduct
  Me.DataSet1.DataTable1.Rows.Add(rw)
End Sub


и в принципе все. 

Чтобы данные были синхронизированы и в гриде на форме и в твоем листе (List) они должни быть привязаны к одному и тому BindingSource, ну или к одному DataSet.

PM MAIL ICQ   Вверх
St33l
Дата 3.9.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 16.6.2007

Репутация: нет
Всего: нет



немного не то, потому что важно заполнение объекта List.
Пробовал вот так:

Код

lstTovarBindingSource.Add(curTovarBindingSource.Current)


но выдало ошибку о несовместимости типов (DataRow, т.к. товары тянутся из базы, и Tovar, т.к. датасорс для lstTovarBindingSource это List<Tovar>).

Теперь вот думаю, как дальше быть? Пока на ум приходит только 1 вариант. Создание промежуточного объекта типа Tovar и РУЧНОГО (путем присвоения его свойствам значений из таблицы) заполнения его характеристик. А потом уже объект добавлять в lstTovarBindingSource.
Может все таки можно как-то проще это сделать?

Это сообщение отредактировал(а) St33l - 3.9.2009, 10:37
PM   Вверх
HellMasterHaiL
Дата 3.9.2009, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 9.8.2006
Где: Россия, МО, г. Юб илейный

Репутация: нет
Всего: 1



Таксики, объект List у тебя какого типа? массив, коллекция? для чего и как используешь? 

И не проще ли организовать "корзину" выбора товаров на БД?

- заводишь таблицу пользователей - USER (или сессий)
- таблица товара имеется - TOVAR
- еще одна табличка соответствия выбранного пользователем (сессией) товара - USERTOVAR

и при перехвате события выбора товара Form2 просто каждый раз перезаполнять (Fill) список выбранных товаров в датасете на основе связи трех таблиц TOVAR - USERTOVAR - USER (как-то так)

PM MAIL ICQ   Вверх
St33l
Дата 3.9.2009, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 16.6.2007

Репутация: нет
Всего: нет



"объект List у тебя какого типа?" - типа Tovar;
"массив, коллекция?" - а как узнать?.. я сделал так: 
Код

List<Tovar> lstTovar = new List<Tovar>();
 и все, дальше в лист просто добавляются новые объекты и затем с ними ведется работа. Похоже на массив. Видать так и есть.
вообще товар это абстрактное понятие. на самом деле там будут вещества и их химический состав. на основе выбранных веществ будут производиться различные расчёты технологических параметров. и данный лист это только начало. когда он будет заполнен пользователем, то производится расчет средневзвешенного состава, и рассчитанный состав улетит во второй лист. а во второй лист добавятся еще вещества. и снова будет расчет средневзвешенного.

просто я не могу понять, как "элегантно" перенести выбранные пользователем данные в list (идет несоответствие типов datarow и Tovar).
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0764 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.